2010-04-19 5 views
4
"([\"'])(?:\\\\?+.)*?\\1" 

je suis venu à cette expression rationnelle toutes les chaînes entre guillemets .. Il semble fonctionner à merveille ... Le problème est de savoir comment faire correspondre le texte qui nest pas des citations à l'intérieur. . l'inverse séronégatifs en quelque sorte ...Expression régulière pour correspondre texte citations en dehors etc

J'ai lu la documentation et

(?!(([\"'])(?:\\\\?+.)*?\\1)) 

travail ne marche pas

+1

Comment cela fonctionne quand vous avez une chaîne qui contient des mots avec des apostrophes? – CaffGeek

+1

vous voulez dire ça? '? cela fonctionne en raison de la référence arrière \\ 1 – GorillaApe

+0

Cela suppose également des guillemets équilibrés. Il échouera dans des situations fragmentaires, ce qui peut ne pas être un problème pour vous mais mérite d'être considéré pour l'exhaustivité. – Robusto

Répondre

6

Hmm Si la première expersion régulière fonctionne, je l'utiliserais pour supprimer toutes les chaînes de la chaîne d'entrée. Ensuite, il ne vous restera plus que le texte qui était en dehors des chaînes de caractères. Avec certains types de modèles, je trouve cette approche beaucoup plus facile et plus simple.

+2

Aussi, vous pouvez "scinder" par la première regex, et garder les bons jetons. – Kobi

Questions connexes