匹配一个字符串,两边都有两个“=”字符

时间:2011-04-22 15:29:19

标签: php regex pcre

我需要一个PHP正则表达式来识别类似的模式:

  

==快速布朗福克斯==

正则表达式无法匹配,但是:

  

===快速布朗狐狸===

我构造了以下正则表达式 - 我所以关闭:

={2}[a-zA-z0-9 ]*={2}

3 个答案:

答案 0 :(得分:2)

之前使用lookbehind,并且像这样使用lookahead:

(?<=^|[^=])={2}[a-zA-z0-9 ]*={2}(?=$|[^=])

编辑虽然此解决方案有效,但效率不如Justin。

答案 1 :(得分:2)

这看起来像是lookarounds的工作:

(?<!=)==[a-zA-z0-9 ]*==(?!=)

我发现以上是最易读的方法。您还可以使用以下内容,其工作方式基本相同:

==(?<!={3})[a-zA-z0-9 ]*(?!={3})==

这也允许您在同一个字符串中多次匹配,只要它们之间有中断(任何非=字符)。例如,==foo== ==bar==应该产生2个匹配,而==foo====bar==则不产生任何匹配。

答案 2 :(得分:0)

^={2}[a-zA-z0-9\s]+={2}$

\s匹配空格
^表示开头 $表示结束