Я использую rubular.com для создания своего регулярного выражения, и их документация описывает следующее:
(...) Capture everything enclosed
(a|b) a or b
Как я могу использовать выражение ИЛИ, не записывая, что в нем содержится? Например, скажем, я хочу захватить либо «ac», либо «bc». Я не могу использовать регулярное выражение
(a|b)(c)
право? С тех пор я фиксирую либо «a», либо «b» в одной группе и «c» в другой, но не одно и то же. Я знаю, что могу фильтровать полученные результаты, но это похоже на дополнительную работу ...
Я упускаю что-то очевидное? Я использую это в Java, если это уместно.
regex
capture
regex-group
goggin13
источник
источник
Ответы:
В зависимости от реализации регулярного выражения вы можете использовать так называемые группы без захвата с синтаксисом
(?:…)
:Вот
(?:a|b)
группа, но вы не можете указать ее совпадение. Таким образом, вы можете ссылаться только на((?:a|b)c)
то, что соответствует либоac
илиbc
.источник
a
илиb
вообще. Другими словами, чтобы соответствоватьac
илиbc
, но только захватить вc
:(?:a|b)(c)
ac
илиab
, но я хочу вывести,ab
еслиab
и только 'c' выводится как 'ac'.Если в вашей реализации он есть, вы можете использовать круглые скобки без захвата:
источник
Даже rubular не заставляет вас использовать круглые скобки, а приоритет
|
низкий. Например, a | bc не соответствует cccисточник
|
- вот почему вам все же нужно использовать скобки.(?:a|b)c
соответствуетac
илиbc
(желаемое поведение), аa|bc
соответствуетa
илиbc
.Если все ваши альтернативы OR являются одиночными символами, вы можете просто использовать оператор "набора символов":
он будет соответствовать только
ac
или,bc
и он будет более читаемым.источник