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  ";  }';

206voto

PhiLho Points 23458
/"(?:[^"\\]|\\.)*"/

Fonctionne dans The Regex Coach et PCRE Workbench.

Exemple de test en JavaScript :

    var s = ' function(){ return " Is big \\"problem\\", \\no? "; }';
    var m = s.match(/"(?:[^"\\]|\\.)*"/);
    if (m != null)
        alert(m);

40voto

Celui-ci provient de nanorc.sample disponible dans de nombreuses distributions linux. Il est utilisé pour la mise en évidence syntaxique des chaînes de caractères de style C

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

23voto

Guy Bedford Points 253

Comme indiqué par ePharaoh, la réponse est la suivante

/"([^"\\]*(\\.[^"\\]*)*)"/

Pour que ce qui précède s'applique aux chaînes de caractères entre guillemets simples ou doubles, utilisez

/"([^"\\]*(\\.[^"\\]*)*)"|\'([^\'\\]*(\\.[^\'\\]*)*)\'/

14voto

Alan Moore Points 39365

Le modèle classique de Friedl, le "unrolled-loop" :

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

11voto

/(["\']).*?(?<!\\)(\\\\)*\1/is

devrait fonctionner avec n'importe quelle chaîne entre guillemets

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