正则表达式(?<! - )是什么意思

spi*_*nt0 9 php regex pcre

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

'/(?<!-)color[^{:]*:[^{#]*$/i'
Run Code Online (Sandbox Code Playgroud)

这个位... (?<!-) 没有出现在我的任何reg-exp手册中.谁知道这意味着什么?(谷歌不会返回任何内容 - 我不认为符号在谷歌工作.)

eld*_*his 10

?<!在括号组的开始是负回顾后.它声称这个词color(严格地说,c在引擎中)没有一个-字符.

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

color
+color
someTextColor
Run Code Online (Sandbox Code Playgroud)

但它会在类似-color或类似的东西上失败background-color.还要注意,引擎在技术上不会"匹配"前面的任何内容c,它只是断言它不是连字符.这可以是根据上下文的一个重要区别(上Rubular所示用一个简单的例子 ;请注意,只有b最后的字符串中被匹配,而不是前面的字母).


jor*_*anm 6

PHP使用perl兼容的正则表达式(PCRE)作为preg_*函数.来自perldoc perlre:

"(?<!pattern)"
零宽度负面后瞻断言.例如,
"/(?<!bar)foo/"匹配任何
不遵循的"foo" "bar".仅适用于固定宽度的后视镜
.