regex - que - expresiones regulares online
¿Qué caracteres pueden usarse como delimitadores de expresiones regulares? (4)
Actualmente hay un error en el lexer que a veces evita que se utilicen los caracteres UTF-8 como un delimitador, incluso aunque no puedas usar Latin1 si no estás en el modo Unicode completo.
¿Qué caracteres se pueden usar como delimitadores para una expresión regular de Perl? m/re/
, m(re)
y måreå
parecen funcionar, pero me gustaría conocer todas las posibilidades.
Como suele ser el caso, me pregunto "¿puedo escribir un programa Perl para responder a esa pregunta?".
Aquí hay una primera aproximación bastante buena de probar todos los caracteres ASCII imprimibles:
#!/usr/bin/perl
use warnings;
use strict;
$_ = ''foo bar''; # something to match against
foreach my $ascii (32 .. 126) {
my $delim = chr $ascii;
next if $delim eq ''?''; # avoid fatal error
foreach my $m (''m'', ''m '') { # with and without space after "m"
my $code = $m . $delim . ''(/w+)'' . $delim . '';'';
# print "$code/n";
my $match;
{
no warnings ''syntax'';
($match) = eval $code;
}
print "[$delim] didn''t compile with $m$delim$delim/n" if $@;
if (defined $match and $match ne ''foo'') {
print "[$delim] didn''t match correctly ($match)/n";
}
}
}
Desde perlop
:
Con la m puede usar cualquier par de caracteres que no sean espacios en blanco como delimitadores.
Así que todo vale, excepto los espacios en blanco. El párrafo completo para esto es:
Si "/" es el delimitador, entonces la m inicial es opcional. Con la m puede usar cualquier par de caracteres que no sean espacios en blanco como delimitadores. Esto es particularmente útil para hacer coincidir los nombres de ruta que contienen "/", para evitar LTS (síndrome del palillo que se inclina). Si "?" es el delimitador, luego la regla de una sola coincidencia de? PATTERN? se aplica Si "''" es el delimitador, no se realiza ninguna interpolación en el PATRÓN. Cuando se usa un carácter válido en un identificador, se requieren espacios en blanco después de la m.
Se puede usar casi cualquier carácter que no sea un espacio en blanco, aunque los caracteres identificadores tienen que estar separados de la m inicial por espacios en blanco. Aunque cuando utiliza una comilla simple como delimitador, deshabilita la interpolación y la mayoría de los saltos de barra invertida.