我試圖理解一段代碼,並且遇到了PHP的preg_replace函數中使用的正則表達式。正則表達式(?<! - )意味着什麼
'/(?<!-)color[^{:]*:[^{#]*$/i'
這有點... (?<!-)
犯規出現在我的任何REG-EXP手冊。任何人都知道這意味着什麼? (谷歌不會回報任何東西 - 我不認爲符號在谷歌工作。)
我試圖理解一段代碼,並且遇到了PHP的preg_replace函數中使用的正則表達式。正則表達式(?<! - )意味着什麼
'/(?<!-)color[^{:]*:[^{#]*$/i'
這有點... (?<!-)
犯規出現在我的任何REG-EXP手冊。任何人都知道這意味着什麼? (谷歌不會回報任何東西 - 我不認爲符號在谷歌工作。)
?<!
在括號組的開始是negative lookbehind。它斷言color
(嚴格來說,發動機中的c
)前面沒有-
字符。
因此,對於更具體的例子,它會在字符串匹配color
:
color
+color
someTextColor
但它將無法在像-color
或background-color
。還要注意,引擎在技術上不會匹配c
之前的任何內容,它只是斷言它不是連字符。這可能是一個重要的區別取決於上下文(illustrated on Rubular with a trivial example;請注意,只有最後一個字符串中的b
匹配,而不是前面的字母)。
我正在學習使用Python的re模塊的正則表達式!
http://docs.python.org/library/re.html
匹配,如果字符串中的當前位置不匹配的前面....這就是所謂的負向後斷言。與正向lookbehind斷言類似,所包含的模式只能匹配某些固定長度的字符串。以反向lookbehind斷言開頭的模式可能會匹配搜索字符串的開頭。
Python正則表達式不像PHP那樣是PCRE。 – jordanm
可以理解,我只是想指出另一個正則表達式庫,我是新來的正則表達式,所以我儘量學習大多數主要語言的正則表達式,所以我想我會指出Python的。 – richardhsu
這是蝙蝠俠的敵人在左眼打的笑臉,但總是微笑......(但它會匹配任何戴類似帽子的人) –
僅供參考:[環視聲明](http:// perldoc .perl.org/perlre.html#Look-Around-Assertions)在regular-expressions.info上的perlre,[Positive and Negative Lookbehind](http://www.regular-expressions.info/lookaround.html#lookbehind)。 – outis