Регулярное выражение для конкретной пары или каждого элемента в паре - PullRequest
3 голосов
/ 12 июля 2010

У меня есть ситуация, когда я могу получить один или оба из пары символов, и я хочу соответствовать любому.

Например:

str = 'cddd a dfsdf b sdfg ab uyeroi'

Я хочу соответствовать любому "a" или "b" или "ab". Если «ab» объединяется, я хочу поймать его как одно совпадение (а не как два совпадения «a», «b»). Если я получу «ab», оно будет всегда в таком порядке («a» всегда будет предшествовать «b»)

Что у меня есть:

/[ab]|ab/

Но я не уверен, будет ли ab более сильным совпадением, чем [ab].

Спасибо за помощь.

Ответы [ 3 ]

6 голосов
/ 12 июля 2010

Ваше текущее выражение не будет делать то, что вы хотите в большинстве популярных движков регулярных выражений - оно будет соответствовать a или b. Поведение зависит от реализации механизма регулярных выражений :

Вы можете легко выяснить, имеет ли аромат регулярного выражения, который вы намереваетесь использовать, движок с текстовым или регулярным выражением. Если имеются обратные ссылки и / или ленивые квантификаторы, вы можете быть уверены, что движок ориентирован на регулярные выражения. Вы можете выполнить тест, применив регулярное выражение regex|regex not к строке regex not. Если полученное совпадение составляет всего regex, то движок направлен на регулярное выражение . Если результат regex not, то он текстовый . Причиной этого является то, что движок, ориентированный на регулярные выражения, "стремится".

Если вы используете движок, ориентированный на регулярные выражения, то для его исправления вы можете изменить порядок членов в чередовании, чтобы убедиться, что он сначала пытается сопоставить ab:

/ab|[ab]/

Или вы можете переписать выражение так, чтобы порядок не имел значения:

/ab?|b/
0 голосов
/ 12 июля 2010

У вас есть экземпляры a, b и ab в виде слов. Вам нужно найти их только как целые слова? Если это так, вы должны попробовать

/ \ баб \ Ь | \ Ь [аб] \ Ь /

0 голосов
/ 12 июля 2010

Это работает:

((ab)|a|b)

или лучше

(ab|[ab])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...