Correspondance des instances non entourées de guillemets
Dans une question précédente, il a été suggéré de faire correspondre toutes les occurrences d'une expression régulière tout en excluant le texte entre guillemets n'est pas réalisable. Cependant, cette limitation peut être surmontée à l'aide d'une regex complexe mais efficace.
La clé de cette regex est d'observer qu'une sous-chaîne est en dehors des guillemets si un nombre pair de guillemets la précède. Cela peut être représenté par l'assertion d'anticipation suivante :
(?=([^"]*"[^"]*")*[^"]*$)
Cette assertion garantit que le texte précédent contient un nombre pair de guillemets suivis de la sous-chaîne actuelle.
Pour exclure les guillemets échappés , nous devons également prendre en compte les barres obliques inverses. L'expression régulière devient légèrement plus complexe :
\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
Cette expression régulière avance d'abord au-delà de tous les caractères autres que les guillemets (S). Lorsqu'il rencontre une barre oblique inverse ou une citation, soit il ignore le caractère suivant (s'il s'agit d'une barre oblique inverse), soit il passe à la citation suivante non échappée.
Bien que cette expression régulière soit quelque peu complexe, elle correspond effectivement à toutes les instances. de l'expression régulière non entourée de guillemets, permettant d'obtenir le résultat souhaité dans les méthodes split() et replace() de JavaScript.
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!