Maison  >  Article  >  interface Web  >  Comment faire correspondre les instances Regex en dehors des guillemets, même avec des guillemets échappés ?

Comment faire correspondre les instances Regex en dehors des guillemets, même avec des guillemets échappés ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-25 04:56:29431parcourir

How to Match Regex Instances Outside of Quotes, Even with Escaped Quotes?

Correspondance des instances de regex en dehors des citations : une approche alternative

Dans une question précédente, il a été suggéré de faire correspondre toutes les instances d'une regex en dehors de les citations sont impossibles. Cependant, ce n'est pas tout à fait exact.

Une solution à ce problème consiste à reconnaître qu'un mot est hors guillemets s'il est suivi d'un nombre pair de guillemets. Cela peut être modélisé comme une assertion prospective :

\+(?=([^"]*"[^"]*")*[^"]*$)

Cependant, cela ne tient pas compte des guillemets échappés. Pour gérer cela, l'expression est modifiée pour ignorer le caractère suivant si une barre oblique inverse est rencontrée avant un guillemet :

\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)

Cette expression complexe garantit que toutes les instances d'une expression régulière qui ne sont pas entre guillemets correspondent, même dans le présence de guillemets échappés.

Alternative généralisée pour les méthodes .split() et .replace()

Bien que cette solution regex fonctionne bien, elle peut ne pas convenir à tous cas, en particulier lorsque vous travaillez avec les méthodes .split() et .replace(). Une approche alternative consiste à utiliser les étapes suivantes :

  1. Divisez la chaîne en segments en fonction des guillemets.
  2. Appliquez l'expression régulière aux segments qui ne sont pas entre guillemets.
  3. Regroupez les segments en vous assurant que les citations sont correctement placées.

Cette approche est plus flexible et peut être utilisée dans un plus large éventail de scénarios.

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