Могу ли я использовать или в регулярном выражении без захвата того, что вложено?


Я использую rubular.com чтобы построить мое регулярное выражение, и их документация описывает следующее:

(...)   Capture everything enclosed
(a|b)   a or b

Как я могу использовать выражение или без захвата того, что в нем? Например, скажем, я хочу захватить либо "ac", либо "bc". Я не могу использовать регулярное выражение

(a|b)(c)

верно? С тех пор я фиксирую либо "a", либо "b" в одной группе и "c" в другой, не то же самое. Я знаю, что могу фильтровать захваченные результаты, но это похоже на больше работа...

я упускаю что-то очевидное? Я использую это в Java, если это уместно.

3 72

3 ответа:

в зависимости от реализации регулярного выражения вы можете использовать так называемый группы без захвата синтаксис (?:…):

((?:a|b)c)

здесь (?:a|b) это группа, но вы не можете ссылаться на свой матч. Таким образом, вы можете ссылаться только на матч ((?:a|b)c), либо ac или bc.

Если ваша реализация имеет его, то вы можете использовать незахватывающие круглые скобки:

(?:a|b)

даже rubular не заставляет вас использовать круглые скобки и приоритет | низкий. Например a / bc не соответствует ccc