2015-06-19 3 views
1

Как я могу сопоставить все приведенные ниже строки с одним регулярным выражением?Регулярное выражение с положительным lookahead/lookbehind

Это регулярное выражение, которое я пробовал: (?<=.+)site(?=.+)

Обратите внимание, что более простые регулярные выражения могли бы сделать эту работу, но весь смысл этого, чтобы узнать, что то, что (?<=.+) и (?=.+) части регулярного выражения делать ,

locationAsite1 
locationAsiteNumber1 
locationAsiteNumber01 
locationAsite01 
locationBsite.01 
locationB.site.02 
(locationB)site.02 
<locationB>site<03>s 
..locationB..site<03> 
+1

Возможности библиотек регулярных выражений весьма разнообразны (JavaScript не обрабатывает, например, положительные/отрицательные утверждения). – Phylogenesis

ответ

3

Ваше регулярное выражение может также записать в виде,

(?<=.)site(?=.) 

, что означает, строка site должна предшествовать и последующим по крайней мере один символ.

Большинство языков не поддерживает переменную длину lookbehind, за исключением семейства C#.

(?<=.+)site(?=.+) 

означает подстроку site должен предшествовать и за которым следует один или более символов. То есть, она будет соответствовать строке site, только если она находится посередине, если она присутствует в начале или в конце.

2

Положительный lookbehind означает, что выражение в (<=) должно быть сопоставлено.

Например, если вы скажете (?<=A)site, то он выберет те site с имеет A перед этим. Хотя A не будет выбран регулярным выражением, он гарантирует только, что A подходит к site.


Положительные опережения таких же, как положительные только, что 'назад выражение необходимо следовать после матча.

Пример: письмо site(?=1) будет соответствовать этим site, у которого 1 сразу последовали за ним. Как положительный lookbehind, он не будет выбирать 1, но только гарантирует, что эти совпадения site сделаны фактически site1.


Ваш случай (? < =.) Сайт (? =.) Не очень хорошо, например, так как он будет соответствовать всем site в вашем входе.

Таким образом, использование (?<=A)site(?=0) будет соответствовать только сайт в строке locationAsite01 поскольку site имеет A предшествующий ему и 0 после него.

Смежные вопросы