Curso de Raku / Expresiones regulares y gramáticas / Expresiones regulares / Capturas
Grupos sin captura
Los paréntesis ( ) hacen dos trabajos a la vez:
agrupan una parte del patrón y la capturan en
$0, $1 y demás. A veces solo quieres el primer
trabajo — tratar varios átomos como una sola unidad — sin gastar en ello
un número de captura. Para eso usa los corchetes [ ], que
agrupan sin capturar.
La agrupación importa en cuanto añades un cuantificador. Un cuantificador se liga solo al átomo inmediatamente anterior, así que el patrón de abajo repite únicamente la última letra:
say 'abccc' ~~ / abc ** 3 /; # 「abccc」Solo se repitió la c tres veces. Envuelve toda la pieza
en [ ] para repetirla entera:
say 'abcabcabc' ~~ / [ abc ] ** 3 /; # 「abcabcabc」Ahora [ abc ] es una sola unidad y ** 3 se
aplica al grupo.
Como [ ] no ocupa ninguna plaza de captura, los números
quedan reservados para las partes que de verdad te importan. Compara una
simple coincidencia de clave y valor:
if 'foo=42' ~~ / (\w+) '=' (\d+) / {
say $0; # 「foo」
say $1; # 「42」
}Supón que a la clave puede precederla una palabra que quieres
saltarte. Agrupa ese prefijo con [ ] para que no altere la
numeración:
if 'the foo=42' ~~ / [ \w+ \s ]? (\w+) '=' (\d+) / {
say $0; # 「foo」
say $1; # 「42」
}El opcional [ \w+ \s ]? emparejó the pero
no reclamó ninguna captura, así que $0 sigue siendo la
clave y $1 sigue siendo el valor. Si hubieras escrito ese
prefijo con ( ), todo se habría desplazado: el prefijo
sería $0, la clave $1 y el valor
$2.
La regla es corta: usa ( ) cuando quieras conservar el
texto emparejado, y [ ] cuando solo quieras agrupar. Ambas
clases admiten cuantificadores y alternativas, y por eso la alternativa
anterior [ cat | dog ] house usaba corchetes: necesitaba la
agrupación pero no otra captura.
Navegación del curso
← Quiz — Capturas | Separe un nombre de archivo →
💪 O ve directamente a los ejercicios de esta
sección.