Regex PHP: 向前看两次

Regex PHP: to look ahead twice

为什么这样:

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

无法匹配这个

lolabcdfg

感谢您的回答!你真好!

这个正则表达式就可以了

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

我总是使用https://regex101.com/在线测试我的正则表达式

因为前瞻只断言,它们不消耗字符...所以基本上你是说,

匹配哈哈:

lol

然后寻找 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。