Maison >développement back-end >tutoriel php >Comment puis-je extraire des sous-chaînes citées en PHP, en ignorant les guillemets échappés ?

Comment puis-je extraire des sous-chaînes citées en PHP, en ignorant les guillemets échappés ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-29 12:54:17792parcourir

How Can I Extract Quoted Substrings in PHP, Ignoring Escaped Quotes?

Exclusion des guillemets échappés dans PHP Regex

En PHP, l'extraction de sous-chaînes entourées de guillemets simples ou doubles nécessite une attention particulière aux séquences d'échappement. Pour ignorer les guillemets échappés dans la chaîne correspondante, nous pouvons utiliser des expressions régulières avancées.

Considérez le code suivant :

$code = preg_replace_callback('/"(.*?)"/', array(&$this, '_getPHPString'), $code);
$code = preg_replace_callback("#'(.*?)'#", array(&$this, '_getPHPString'), $code);

Ces expressions régulières correspondent aux sous-chaînes entre les guillemets, mais elles ne parviennent pas à exclure les guillemets échappés. . Pour résoudre ce problème, nous utilisons des modèles d'expressions régulières plus complets :

Regex recommandées :

  • Citations doubles Sous-chaînes :

    "[^"\\]*(?:\\.[^"\\]*)*"/s
  • Sous-chaînes entre guillemets simples :

    /'[^'\\]*(?:\\.[^'\\]*)*'/s

Ces expressions régulières permettent tout caractère non échappé, y compris les caractères échappés (par exemple, "n" et "t"), et séquences d'échappement ("").

Explication :

  • [^"\\]* correspond à zéro ou plusieurs caractères sans guillemets ou barre oblique inverse.
  • (?:\\.[^"\\]*)* correspond à n'importe quel nombre de caractères d'échappement suivis d'un guillemet ou d'une barre oblique inverse caractères.
  • le modificateur permet la correspondance sur une seule ligne, ce qui est nécessaire pour s'étendre sur plusieurs lignes.

En incorporant ces expressions rationnelles, vous pouvez extraire avec précision les sous-chaînes qui incluent des caractères d'échappement dans les chaînes entre guillemets. .

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn