157 votes

Regex pour chaîne de caractères avec guillemets échappatoires

Comment puis-je obtenir la sous-chaîne " It's big \"problem " en utilisant une expression régulière ?

s = ' function(){  return " It\'s big \"problem  ";  }';

2voto

mathias hansen Points 41

En voici une qui fonctionne à la fois avec " et ' et vous pouvez facilement en ajouter d'autres au début.

("|')(?:\\\\\\1|\[^\\1\])\*?\\1

il utilise la référence arrière ( \1 ) correspondent exactement à ce qui se trouve dans le premier groupe (" ou ').

http://www.regular-expressions.info/backref.html

0voto

Henrik Paul Points 22787

Il faut se rappeler que les regexps ne sont pas une solution miracle pour tout ce qui concerne les chaînes de caractères. Certaines choses sont plus simples à faire avec un curseur et une recherche linéaire, manuelle. A LFC ferait l'affaire assez trivialement, mais il n'y a pas beaucoup d'implémentations CFL (afaik).

0voto

user2267983 Points 1

Si elle est recherchée dès le début, cela peut peut-être fonctionner ?

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

0voto

Rvanlaak Points 132

Une version plus étendue de https://stackoverflow.com/a/10786066/1794894

/"([^"\\]{50,}(\\.[^"\\]*)*)"|\'[^\'\\]{50,}(\\.[^\'\\]*)*\'|“[^”\\]{50,}(\\.[^“\\]*)*”/   

Cette version contient également

  1. Longueur minimale du devis de 50
  2. Type de devis supplémentaire (ouvert et fermer )

0voto

J'ai rencontré un problème similaire en essayant de supprimer les chaînes entre guillemets qui peuvent interférer avec l'analyse de certains fichiers.

J'ai fini par trouver une solution en deux étapes qui bat toutes les regex alambiquées que vous pouvez inventer :

 line = line.replace("\\\"","\'"); // Replace escaped quotes with something easier to handle
 line = line.replaceAll("\"([^\"]*)\"","\"x\""); // Simple is beautiful

Plus facile à lire et probablement plus efficace.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X