Maison  >  Article  >  développement back-end  >  Assertions Lookbehind de longueur variable : l'avenir des expressions régulières ?

Assertions Lookbehind de longueur variable : l'avenir des expressions régulières ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-28 09:11:29452parcourir

 Variable-Length Lookbehind Assertions: The Future of Regular Expressions?

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

    • K n'est pas aussi flexible que lookbehind assertions et ne peut pas spécifier le point final des caractères supprimés.
    • Les anticipations négatives peuvent être plus complexes et peuvent ne pas être prises en charge par tous les moteurs d'expressions régulières.

    Questions supplémentaires

    • Est-il possible de spécifier un point final pour l'effet de K ?
    • Existe-t-il des implémentations d'expressions régulières améliorées pour Perl, Ruby, JavaScript et PHP similaires à l'expression régulière de Python ?

    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