我正在尝试理解一段代码,并且遇到了PHP的preg_replace函数中使用的这个正则表达式。
'/(?<!-)color[^{:]*:[^{#]*$/i'
这一位...... (?<!-)
并没有出现在我的任何reg-exp手册中。谁知道这意味着什么? (Google不会返回任何内容 - 我不认为符号可以在google中运行。)
答案 0 :(得分:10)
括号组开头的?<!
为negative lookbehind。它声称单词color
(严格来说,引擎中的c
)前面没有-
字符。
因此,对于更具体的示例,它将匹配字符串中的color
:
color
+color
someTextColor
但是-color
或background-color
之类的内容会失败。另请注意,引擎在技术上不会匹配c
之前的任何内容,它只是断言它不是连字符。这可能是一个重要的区别,具体取决于上下文(illustrated on Rubular with a trivial example;请注意仅最后一个字符串中的b
是匹配的,而不是前面的字母。)
答案 1 :(得分:6)
PHP使用perl兼容的正则表达式(PCRE)作为preg_ *函数。来自perldoc perlre
:
"(?<!pattern)"
零宽度负面后瞻断言。例如
"/(?<!bar)foo/"
匹配任何出现的“foo” 不要关注"bar"
。仅适用于固定宽度的外观 -
后面。
答案 2 :(得分:4)
我正在使用Python的re模块学习正则表达式!
http://docs.python.org/library/re.html
匹配,如果字符串中的当前位置前面没有匹配....这称为负后观断言。与正向lookbehind断言类似,包含的模式必须仅匹配某些固定长度的字符串。以负向lookbehind断言开头的模式可能在被搜索字符串的开头匹配。