在我的语法高亮显示中,我使用regex来解析不同的术语。下面是我解析PHP类的方法:
foreach ( PHP::$Classes as $class )
$code = preg_replace( "/'b{$class}'b/", $this->_getHtmlCode( $class, PHP::$Colors['class'] ), $code );
现在,忽略PHP类和_getHtmlCode函数。正则表达式"/'b{$class}'b/"
匹配诸如count
之类的名称。如果我创建一个名为$count
的变量,它就匹配得很好。
如何查找前面没有$
的类名?
您可以使用负零宽度后看来完成相同的任务-基本上,确保在文本前没有美元符号:/(?<!'$){$class}/
。
(?<! # Non-capturing look-behind group, captures only if the following regex is NOT found before the text.
'$) # Escaped dollar sign
{$class} # Class name
是否尝试匹配className?即class className {}
或$foo = new className
如果是这样,可以检查classname前是否有一个或多个空格:
/[ ]+{$class}'b/
奇怪的是,$算一个边界,不是吗?无论如何,一种修复方法是将它放在'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";
}