2011-07-18 11 views
0

私の構文ハイライトでは、正規表現を使用してさまざまな用語を解析します。ちょうどPHPクラスと_getHtmlCode機能を無視し、今PHP:正規表現の一致文字列がドル記号で始まっていない

foreach (PHP::$Classes as $class) 
    $code = preg_replace("/\b{$class}\b/", $this->_getHtmlCode($class, PHP::$Colors['class']), $code); 

:以下は、私はPHPクラスを解析する方法です。正規表現"/\b{$class}\b/"は、countなどの名前と一致します。私が$countという名前の変数を作ると、それはうまくいきました。

先行しないクラス名を探すには、どうすれば$を見つけることができますか?

答えて

4

あなたは、同じタスクを達成するために、負のゼロ幅ルックの背後に使用することができます - 基本的に、はあなたのテキストの前にドル記号がないことを確認する:/(?<!\$){$class}/

(?<!  # Non-capturing look-behind group, captures only if the following regex is NOT found before the text. 
    \$) # Escaped dollar sign 
{$class} # Class name 
+0

おかげで、素晴らしい作品を! :) –

+0

問題ありません。 RegExで問題が発生した場合は、http://regular-expressions.info/を参照してください。本当に便利なリファレンスが含まれています。 – Nightfirecat

0

classNameと一致させようとしていますか?すなわちclass className {}または

ので、あなたはクラス名の前に1つ以上のスペースをチェックすることができれば$foo = new className:境界はそれではないよう

/[ ]+{$class}\b/ 
0

興味あること$カウント。 とにかく、1つの修正は\ bの後にこれを置くことです:

(?<!\$) 

それはここで

がこれを証明するテストスクリプトだった何を意味するのかについてhttp://www.php.net/manual/en/regexp.reference.assertions.php参照してください:

$list=array(
    'class MyClass', 
    'class HisClass', 
    'var $MyClass', 
    ); 

foreach($list as $s){ 
    echo $s."\n"; 
    if(preg_match('/\bMyClass\b/',$s))echo "OK";else echo "Failed"; 
    echo "\n"; 
    if(preg_match('/\b(?<!\$)MyClass\b/',$s))echo "OK";else echo "Failed"; 
    echo "\n"; 
    } 
関連する問題