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);

「$」で始まる変数などの取得に成功しましたが、現在、その正規表現を変更して $ の後ろを検索し、\ コメント キーワードが前にあるかどうかを確認しようとしています。もしそうなら、それを取得しないでください.誰かが良い提案をしていますか? 上記のように、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 に答える