Могу ли я использовать или в регулярном выражении без захвата того, что вложено?
Я использую rubular.com чтобы построить мое регулярное выражение, и их документация описывает следующее:
(...) Capture everything enclosed
(a|b) a or b
Как я могу использовать выражение или без захвата того, что в нем? Например, скажем, я хочу захватить либо "ac", либо "bc". Я не могу использовать регулярное выражение
(a|b)(c)
верно? С тех пор я фиксирую либо "a", либо "b" в одной группе и "c" в другой, не то же самое. Я знаю, что могу фильтровать захваченные результаты, но это похоже на больше работа...
я упускаю что-то очевидное? Я использую это в Java, если это уместно.
3 ответа:
в зависимости от реализации регулярного выражения вы можете использовать так называемый группы без захвата синтаксис
(?:…)
:((?:a|b)c)
здесь
(?:a|b)
это группа, но вы не можете ссылаться на свой матч. Таким образом, вы можете ссылаться только на матч((?:a|b)c)
, либоac
илиbc
.
даже rubular не заставляет вас использовать круглые скобки и приоритет
|
низкий. Например a / bc не соответствует ccc