在我的语法荧光笔中,我使用正则表达式来解析不同的术语。下面是我解析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
的变量,那么它就匹配得很好。
如何查找前面没有$
?
答案 0 :(得分:5)
您可以使用负零宽度后视来完成相同的任务 - 基本上,确保在您的文字之前不是美元符号:/(?<!\$){$class}/
。
(?<! # Non-capturing look-behind group, captures only if the following regex is NOT found before the text.
\$) # Escaped dollar sign
{$class} # Class name
答案 1 :(得分:0)
您是否尝试匹配className?即class className {}
或$foo = new className
如果是这样,您可以在classname之前检查一个或多个空格:
/[ ]+{$class}\b/
答案 2 :(得分:0)
好奇$计为边界不是它。 无论如何,一个解决方法是将其放在\ 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";
}