Necesidad de expresiones regulares para analizar palabras clave = 'valor' con comillas simples o dobles
-
12-09-2019 - |
Pregunta
Estoy teniendo problemas para escribir una expresión regular (apto para preg_match () de PHP) que va a analizar pares de palabras clave = 'valor' independientemente de si el
name="value"
name='value'
Solución
En Perl se trata de una expresión regular que iba a funcionar. En primer lugar, igualó para el inicio de la línea a continuación partidos para uno o más caracteres no = y los pone a $ 1. A continuación se ve a los = a continuación, los unos no paréntesis, con una opción de juego para "o" y establece que a $ 2.
/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/
Si usted quisiera que coincide con las expresiones en blanco como.
Esta = ""
Reemplazar los dos últimos + con un * De lo contrario, esto debería funcionar
Editar Como se mencionó en los comentarios. Doug utiliza ...
/^\s?([^=]+)\s?=\s?("([^"]+)"|\'([^\']+)\')\s?/
Esto coincidir con uno espacio en blanco opcional en el extremo éter de la entrada o valor y se ha eliminado el marcador de fin de línea.
Otros consejos
/^(\w+?)=(['"])(\w+?)\2$/
¿Qué va a colocar la llave en $1
y el valor en $3
.
A los pocos años de retraso, pero ya que esta cuestión es altamente clasificado en Google, y las respuestas no satisfizo mis necesidades, aquí hay otra expresión :
(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2
Esto corresponderá con comillas simples o dobles, teniendo en cuenta escaparon citas, y los valores no cotizados.
name = bar
name = "bar"
name = 'bar'
name = "\"ba\"r\""
Es, sin embargo, tiene una limitación en que si se pierde un valor la llave del siguiente par clave / valor que se lee. Esto puede ser abordado mediante el uso de un lista separada por comas de pares clave / valor.