2016-11-22 52 views
1

爲什麼這樣的:正則表達式PHP:向前看兩次

/^lol(?=abc)(?=dfg)$/ 

不能匹配這個

lolabcdfg 

謝謝您的回答!這真是太好了!

+0

關於lookahead的很好的文檔可以在www.regular-expressions.info找到(http://www.regular-expressions.info/lookaround.html) –

回答

4

因爲向前看符號只斷言,他們不消耗字符...所以基本上你說,

匹配笑:

lol 

再看看F頭或ABC:

lol(abc) // matches 

現在向前看的DFG

lol(dfg) // does not match 

這就是爲什麼它不工作。如果你想檢查abc和abcdfg,你需要使用字符。如果只想向前看,你可以這樣做:

/^lol(?=abc|dfg|abcdfg)/ 

這將匹配字符串

  • lolabc
  • loldfg
  • lolabcdfg

但是它不是非常有用。以下更合適

/^lol(abc)?(dfg)?/ 

這將匹配lol,可選abc然後可選dfg。

+0

是的,歡呼@ chris85 –

1

此正則表達式會做

/^lol(abc)?(dfg)?$/ 

我總是用https://regex101.com/來測試我的正則表達式在線

+1

爲什麼這麼說?我不明白( –

+1

但這不是問題...你也可以使用'/^lolabcdfg $ /' – Dekel

+0

@ V.Terte使用正則表達式我發送給你的URL我也粘貼了消息你會得到一個很好的解釋如何正則表達式工作 – nicowernli