Maison > Article > développement back-end > Comment puis-je obtenir la fonctionnalité des assertions lookbehind de longueur variable dans les expressions régulières sans elles ?
Les assertions Lookbehind de longueur variable, telles que /(?<!foo.*)bar/, autorisent vous devez faire correspondre un modèle si une certaine condition est remplie pour un nombre variable de caractères précédant le modèle. Bien que certaines implémentations d'expressions régulières, telles que le module regex en Python, prennent en charge les assertions lookbehind de longueur variable, il existe des alternatives qui peuvent être utilisées dans d'autres implémentations.
One Une alternative aux assertions lookbehind de longueur variable est le caractère K. K marque un point dans l'expression régulière où les correspondances suivantes ne doivent pas être considérées comme faisant partie de la chaîne capturée finale. Par exemple, l'expression régulière suivante :
s/unchanged-part\Kchanged-part/new-part/x
Faire correspondre la sous-chaîne "changed-part" dans la chaîne "unchanged-partchanged-part" et la remplacer par "new-part". Cependant, la partie « partie inchangée » de la chaîne ne serait pas incluse dans le remplacement.
Alors que K peut être utilisé pour approximer les assertions lookbehind de longueur variable dans correspondant, ce n’est pas aussi flexible. Par exemple, il n'existe pas d'équivalent à une assertion d'analyse négative utilisant K.
Une assertion d'analyse négative correspond à un modèle si une certaine condition n'est pas remplie pour un nombre variable de caractères précédant le modèle. L'expression régulière suivante utilise une assertion lookbehind négative pour faire correspondre la chaîne "bar" uniquement si elle n'est pas précédée de "foo":
/(?<!foo.*)bar/
Une approximation de cette expression sans utiliser d'assertions lookbehind de longueur variable peut être écrit comme :
s/^(?:(?!foo).)*\Kbar/moo/s;
Bien que les implémentations d'expressions régulières standard en Perl, Ruby, JavaScript et PHP ne prennent pas en charge les assertions lookbehind de longueur variable, il existe des assertions régulières améliorées Implémentations d'expressions disponibles pour chacun de ces langages :
Ces implémentations améliorées d'expressions régulières offrent des fonctionnalités et des optimisations supplémentaires, notamment la prise en charge des assertions lookbehind de longueur variable.
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!