我正在尝试理解一段代码并遇到了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
最后的字符串中被匹配,而不是前面的字母).
PHP使用perl兼容的正则表达式(PCRE)作为preg_*函数.来自perldoc perlre
:
"(?<!pattern)"
零宽度负面后瞻断言.例如,
"/(?<!bar)foo/"
匹配任何
不遵循的"foo""bar"
.仅适用于固定宽度的后视镜
.