2

我得到以下代码

$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。任何帮助表示赞赏。

4

2 回答 2

2

你可以试试:

preg_match_all("~(?<!//)\$([^;]*);~", $original_file, $matches, PREG_PATTERN_ORDER);
于 2013-11-04T18:16:58.123 回答
0

作为@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概念和讨论。

于 2013-11-04T18:22:11.003 回答