Assertions Lookbehind de longueur variable dans les expressions régulières
Les expressions régulières offrent de puissantes capacités de correspondance de modèles, mais la mise en œuvre d'assertions Lookbehind de longueur variable a a longtemps été un sujet de débat.
Implémentations avec des assertions Lookbehind
Actuellement, les assertions lookbehind de longueur variable sont prises en charge par le module regex en Python. La syntaxe est (?
<code class="python">>>> import regex >>> m = regex.search('(?<!foo.*)bar', 'f00bar') >>> print(m.group()) bar >>> m = regex.search('(?<!foo.*)bar', 'foobar') >>> print(m) None</p> <p><strong>Alternatives sans assertions Lookbehind</strong></p> <p>En l'absence d'assertions lookbehind, il existe deux alternatives :</p> <ul> <li> <p><strong>K (Conserver) :</strong> Ce symbole marque un point dans le motif devant lequel tous les caractères correspondants sont supprimés avant la substitution ou le regroupement.</p> <pre class="brush:php;toolbar:false">s/(?<=foo.*)bar/moo/s;
Devient :
s/foo.*\Kbar/moo/s;
Avis négatif : Cette technique utilise un caractère négatif anticipation pour vérifier l'absence de "foo".
s/(?<!foo.*)bar/moo/s;
Devient :
s/^(?:(?!foo).)*\Kbar/moo/s;
Implémentations futures
L'absence d'assertions lookbehind de longueur variable dans les langages traditionnels comme Perl et JavaScript a soulevé des questions sur la mise en œuvre future. Il est possible qu'un jour ces langages adoptent un module d'expression régulière amélioré similaire à l'expression régulière de Python.
Limitations des alternatives
Questions supplémentaires
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!