Совпадение строки с ровно двумя символами "=" с каждой стороны - PullRequest
1 голос
/ 22 апреля 2011

Мне нужно регулярное выражение PHP для определения таких шаблонов, как:

== Быстрая коричневая лиса ==

Регулярное выражение не может соответствовать, однако:

=== Быстрая коричневая лиса ===

У меня построено следующее регулярное выражение - я , поэтому close:

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

Ответы [ 3 ]

2 голосов
/ 22 апреля 2011

Это похоже на работу для lookarounds :

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

Я считаю, что приведенный выше способ является наиболее читабельным способом сделать это.Вы также можете использовать следующее, которое работает в основном таким же образом:

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

Это также позволит вам сопоставлять несколько раз в одной и той же строке, пока есть разрыв (любой не-=характер) между ними.Например, ==foo== ==bar== должно дать 2 совпадения, а ==foo====bar== - ни одного.

2 голосов
/ 22 апреля 2011

Используйте lookbehind before и lookahead after примерно так:

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

Редактировать: Хотя это решение работает, оно не так эффективно, как Джастин.

0 голосов
/ 22 апреля 2011
^={2}[a-zA-z0-9\s]+={2}$

\s соответствует пробелу
^ обозначает начало
$ обозначает конец

...