Estoy usando rubular.com para construir mi expresión regular, y su documentación describe lo siguiente:
(...) Capture everything enclosed
(a|b) a or b
¿Cómo puedo usar una expresión OR sin capturar su contenido? Por ejemplo, digamos que quiero capturar "ac" o "bc". No puedo usar la expresión regular
(a|b)(c)
¿Derecha? Desde entonces capturo "a" o "b" en un grupo y "c" en otro, no es lo mismo. Sé que puedo filtrar los resultados capturados, pero eso parece más trabajo ...
¿Me estoy perdiendo algo obvio? Estoy usando esto en Java, si es pertinente.
regex
capture
regex-group
goggin13
fuente
fuente

Respuestas:
Dependiendo de la implementación de la expresión regular, puede usar los llamados grupos que no capturan con la sintaxis
(?:…):Aquí
(?:a|b)hay un grupo, pero no puede hacer referencia a su coincidencia. Por lo tanto, solo puede hacer referencia a la coincidencia de((?:a|b)c)que seaacobc.fuente
anibnada. En otras palabras, para igualaracobc, pero solo capturar elc:(?:a|b)(c)acoab, pero quiero generarabsiaby solo 'c' es la salida es 'ac'.Si su implementación lo tiene, entonces puede usar paréntesis sin captura:
fuente
Incluso rubular no te obliga a usar paréntesis y la precedencia de
|es baja. Por ejemplo, a | bc no coincide con cccfuente
|eso usted no tiene que parens uso.(?:a|b)ccoincide conacobc(el comportamiento deseado), mientras quea|bccoincide conaobc.Si sus alternativas OR son todas caracteres individuales, puede usar el operador "conjunto de caracteres":
solo coincidirá con
acobcy es más legible.fuente