Curso de Raku / Expresiones regulares y gramáticas / Expresiones regulares / Emparejar cadenas

El objeto de coincidencia

Cuando un regex coincide, el emparejamiento inteligente devuelve un objeto de coincidencia. Ese mismo objeto se guarda también automáticamente en la variable especial $/, a veces llamada «la variable de coincidencia».

El objeto de coincidencia es mucho más que una respuesta de sí o no. Como cadena, es el texto que coincidió, ya sea con el método .Str o con el prefijo ~, que es el operador de conversión a cadena y hace exactamente lo mismo:

my $m = 'concatenate' ~~ /cat/;
say $m.Str; # cat
say ~$m;    # cat

También sabe dónde se encontró la coincidencia en la cadena. El método .from da la posición donde empieza y .to la posición justo después de su final:

my $m = 'room 7 left' ~~ /\d/;
say $m.Str;  # 7
say $m.from; # 5
say $m.to;   # 6

Las posiciones se cuentan desde cero, así que el dígito 7 está en el índice 5.

Cuando el regex no coincide, el resultado no es un objeto de coincidencia en absoluto: es el valor especial Nil. Asignar Nil a un escalar lo deja sin definir:

my $m = 'abc' ~~ /z/;
say $m.defined; # False

Así que siempre puedes comprobar .defined (o simplemente usar el valor en contexto booleano) antes de leer el texto coincidente.

Práctica

Resuelve 1 cuestionario sobre el contenido de este tema.

Quiz — Smartmatch   |   Quiz — Emparejamiento


💪 O ve directamente a los ejercicios de esta sección.