2009-06-07 8 views
8

Je n'arrive pas à écrire une expression régulière (adaptée à preg_match() de PHP) qui va analyser les paires de mots-clés = 'value' que la valeur < La chaîne est entourée de guillemets simples ou doubles. OIEau dans les deux cas suivants je dois obtenir le nom < > et <valeur> où la chaîne <valeur> peut contenir le type de citations non englobante:J'ai besoin d'une regex pour analyser le mot-clé = 'value' avec des guillemets simples ou doubles

name="value" 
name='value' 

Répondre

14

En Perl c'est une expression régulière travaillerait. Il correspond d'abord au début de la ligne puis correspond à un ou plusieurs caractères non = et les définit à 1 $. Ensuite, il semble que = alors les une parenthèse non avec un choix de contrepartie pour « ou" et définit que 2 $.

/^([^=]+)=(?:"([^"]+)"|'([^']+)')$/ 

Si vous vouliez faire correspondre les expressions vides comme.

Ce = » "

Remplacer les deux dernières + avec un * Sinon, cela devrait fonctionner

Modifier Comme mentionné dans les commentaires. Doug utilisé ...

Ceci correspond à un espace blanc optionnel à la fin de l'entrée ou de la valeur et il a supprimé le marqueur de fin de ligne.

+2

il correspondra nom = 'asd » avec une double citation au et, ce n'est pas correct –

+1

ne correspond plus à des ensembles de devis non correspondant – Copas

+0

argh vous mis à jour avant ma réponse:..! P –

4
/^(\w+?)=(['"])(\w+?)\2$/ 

qui placera la clé dans $1 et la valeur $3.

1

Quelques années plus tard, mais étant donné que cette question est très bien classé sur Google, et les réponses ne répondait pas à mes besoins, voici une autre expression:

(?<key>\w+)\s*=\s*(['"]?)(?<val>(?:(?!\2)[^\\]|\\.|\w)+)\2 

Cela correspondra des guillemets simples ou doubles, en prenant en compte échappé guillemets, et les valeurs non cotées. Cependant, il existe une limitation en ce sens que si une valeur est manquante, la clé de la paire clé/valeur suivante est lue. Cela peut être résolu en utilisant un comma separated list de paires clé/valeur.

Questions connexes