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

Linda Hamilton
Libérer: 2024-10-28 09:11:29
original
533 Les gens l'ont consulté

 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;
Copier après la connexion

Devient :

s/foo.*\Kbar/moo/s;
Copier après la connexion
  • Avis négatif : Cette technique utilise un caractère négatif anticipation pour vérifier l'absence de "foo".

    s/(?<!foo.*)bar/moo/s;
    Copier après la connexion

    Devient :

    s/^(?:(?!foo).)*\Kbar/moo/s;
    Copier après la connexion
  • 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!

    source:php.cn
    Déclaration de ce site Web
    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
    Derniers articles par auteur
    Tutoriels populaires
    Plus>
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal