正则表达式来获取两个字符串之间的任何内容'$';和'';并且前面没有'//';


Regular Expression to get anything between two strings '$' and ';' and not preceded by '//'

我得到了以下代码

$original_file=str_replace('<?php','',file_get_contents('file.txt'));
//regular expression to get anything that starts with '$' and end with ';'
preg_match_all("/''$(.*?);/",$original_file,$matches,PREG_PATTERN_ORDER);

我已经成功地获得了以"$"开头的变量或任何内容,但现在我正试图修改该正则表达式以查找$,并检查它前面是否有''comments关键字。如果是,那就不要接受。有人有好的建议吗?我使用的是PHP preg_match_all,正如您在上面看到的那样。感谢您的帮助。

您可以尝试:

preg_match_all("~(?<!//)'$([^;]*);~", $original_file, $matches, PREG_PATTERN_ORDER);

As@anubhava,但使用s选项遍历所有$str行,

preg_match_all('/(?<!''')'$([^;]+);/s', $str, $m, PREG_PATTERN_ORDER);

为了避免通用匹配,使用变量语法(假设字母数字变量如PHP变量(,

preg_match_all(
    '/(?<!''')'$([a-z0-9_]+);/si', 
    $str, 
    $m, 
    PREG_PATTERN_ORDER
);

如果没有这一点增强,您的解析器将捕获错误的语法,在的情况下

$str = "'nTEST'n'n '$x;'$y;'ny'$y_ '$_X;"; 

有关完整的"模板解析",请参阅Smallest Tempalte System的概念和讨论。