正则表达式(?<!---)的含义是什么 - >

时间:2012-06-06 21:17:53

标签: php regex pcre

我正在尝试理解一段代码,并且遇到了PHP的preg_replace函数中使用的这个正则表达式。

'/(?<!-)color[^{:]*:[^{#]*$/i'

这一位...... (?<!-) 并没有出现在我的任何reg-exp手册中。谁知道这意味着什么? (Google不会返回任何内容 - 我不认为符号可以在google中运行。)

3 个答案:

答案 0 :(得分:10)

括号组开头的?<!negative lookbehind。它声称单词color(严格来说,引擎中的c)前面没有-字符。

因此,对于更具体的示例,它将匹配字符串中的color

color
+color
someTextColor

但是-colorbackground-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断言开头的模式可能在被搜索字符串的开头匹配。