Faire correspondre les instances en dehors des guillemets
Contrairement aux hypothèses précédentes, il est possible de faire correspondre toutes les instances d'une expression régulière donnée qui ne sont pas entre guillemets parties d'une chaîne utilisant des expressions régulières, prenant même en compte les guillemets échappés.
Solution Regex
Pour y parvenir, utilisez une assertion anticipée qui vérifie si chaque mot est en dehors des guillemets, ce qui se produit lorsqu'un nombre pair de guillemets le suit. L'expression régulière ci-dessous capture ce modèle :
\+(?=([^"]*"[^"]*")*[^"]*$)
Gestion des guillemets échappés
Pour gérer les guillemets échappés, modifiez l'expression pour ignorer les barres obliques inverses et passer à la citation suivante sans échappement. :
\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)
Cela garantit que les guillemets échappés ne sont pas comptés comme des guillemets d'ouverture.
Utilisation de JavaScript avec .split() et .replace()
Pour une utilisation avec les méthodes .split() et .replace() de JavaScript, le code suivant peut être utilisé :
const input = '+bar+baz"not+or\"+or+\"this+\"foo+bar+';
const replaced = input.replace(/\+(?=([^"\]*(\.|"([^"\]*\.)*[^"\]*"))*[^"]*$)/g, '#');
console.log(replaced); // "#bar#baz\"not+or\"+or+\"this+\"foo#bar#"
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!