web-dev-qa-db-fra.com

Puis-je utiliser un OR dans regex sans capturer ce qui est inclus?

J'utilise rubular.com pour construire mon regex, et leur documentation décrit ce qui suit:

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

Comment utiliser une expression OR sans capturer son contenu? Par exemple, supposons que je souhaite capturer "ac" ou "bc". Je ne peux pas utiliser l'expression régulière

(a|b)(c)

droite? Depuis lors, je capture "a" ou "b" dans un groupe et "c" dans un autre, pas le même. Je sais que je peux filtrer à travers les résultats capturés, mais cela semble plus de travail ...

Est-ce que je manque quelque chose d'évident? J'utilise ceci en Java, si cela est pertinent.

93
goggin13

Selon l’implémentation de l’expression régulière, vous pouvez utiliser ce que l’on appelle groupes non capturés avec la syntaxe (?:…):

((?:a|b)c)

Ici (?:a|b) est un groupe mais vous ne pouvez pas référencer sa correspondance. Vous ne pouvez donc que faire référence à la correspondance de ((?:a|b)c) c'est-à-dire ac ou bc.

146
Gumbo

Si votre implémentation en dispose, vous pouvez utiliser des parenthèses non capturables:

(?:a|b)
21
Marc Mutz - mmutz

Même rubular ne vous oblige pas à utiliser des parenthèses et la priorité de | est faible. Par exemple a | bc ne correspond pas à ccc

1
msw