Я могу использовать ИЛИ в regex, не получая то, что включается?

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

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

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

(a|b)(c)

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

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

96
задан gblomqvist 26 August 2018 в 04:32
поделиться

3 ответа

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

((?:a|b)c)

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

158
ответ дан 24 November 2019 в 05:38
поделиться

Даже пустые скобки не заставляют вас использовать скобки, а приоритет | низкий. Например, a | bc не соответствует ccc

1
ответ дан 24 November 2019 в 05:38
поделиться

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

(?:a|b)
22
ответ дан 24 November 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: