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