validar regulares regular para numeros letras expresiones expresion especiales dobles dentro cualquier concatenar comillas caracteres caracter regex perl escaping

regex - para - expresiones regulares javascript caracteres especiales



¿Cómo puedo unir cadenas de comillas dobles con caracteres de comillas dobles escapadas? (7)

Necesito una expresión regular Perl para que coincida con una cadena. Supongo que solo cadenas de comillas dobles, que / "es un carácter de comillas literal y NO el final de la cadena, y que una / es una barra diagonal inversa literal y no debe escapar de un carácter de comillas. Si no está claro, algunos ejemplos:

"/"" # string is 1 character long, contains dobule quote "//" # string is 1 character long, contains backslash "///"" # string is 2 characters long, contains backslash and double quote "////" # string is 2 characters long, contains two backslashes

Necesito una expresión regular que pueda reconocer las 4 de estas posibilidades, y todas las demás variaciones simples sobre esas posibilidades, como cadenas válidas. Lo que tengo ahora es:

/".*[^//]"/

Pero eso no está bien, no coincidirá con ninguno de ellos excepto el primero. ¿Alguien puede darme un empujón en la dirección correcta sobre cómo manejar esto?


¿Qué tal esto?

/"([^//"]|////|//")*"/

coincide con cero o más caracteres que no son barras o comillas O dos barras O con una barra oblicua y luego una comilla


Aquí hay una manera muy simple:

/"(?://?.)*?"/

Solo recuerde si está incrustando dicha expresión regular en una cadena para duplicar las barras diagonales inversas.


Prueba este fragmento de código: (/".+")


Una solución genérica (que coincida con todos los caracteres retrocedidos):

/ /A " # Start of string and opening quote (?: # Start group [^//"] # Anything but a backslash or a quote | # or //. # Backslash and anything )* # End of group " /z # Closing quote and end of string /xms


Ver Text::Balanced . Es mejor que reinventar la rueda. Use gen_delimited_pat para ver el patrón de resultados y aprenda a formarlo.


RegExp::Common es otra herramienta útil a tener en cuenta. Contiene expresiones regulares para muchos casos comunes, incluidas las cadenas entre comillas:

use Regexp::Common; my $str = ''" this is a /" quoted string"''; if ($str =~ $RE{quoted}) { # do something }


/"(?:[^//"]|//.)*"/

Esto es casi lo mismo que la respuesta de Cal, pero tiene la ventaja de emparejar cadenas que contienen códigos de escape como /n .

Los caracteres ?: Están ahí para evitar que la expresión contenida se guarde como una retro-referencia, pero se pueden eliminar.