Kann PCRE kontextsensitive Grammatiken wie {a^n b^n c^n; zuordnen?

Susan Sarandon
Freigeben: 2024-10-23 01:06:03
Original
995 Leute haben es durchsucht

Can PCRE Match Context-Sensitive Grammars Like {a^n b^n c^n;?

Übereinstimmung kontextsensitiver Grammatiken mit PCRE: A^n B^n C^n (z. B. „aaabbbccc“)

Während regelmäßig Ausdrücke werden traditionell mit dem Parsen regulärer Grammatiken in Verbindung gebracht, moderne Implementierungen wie PCRE bieten erweiterte Funktionen. Dies wirft die Frage auf: Können wir PCRE verwenden, um komplexere, kontextsensitive Grammatiken zu analysieren?

Lassen Sie uns insbesondere die Herausforderung untersuchen, Zeichenfolgen nach der kontextsensitiven Grammatik {a^n b^n c^n; n > 0} (z. B. „aaabbbccc“).

Regex-Lösung:

Inspiriert durch den ersten Versuch von NullUserException haben wir den folgenden Regex entwickelt:

~^
(?=(a(?-1)?b)c)
a+(b(?-1)?c)
$~x
Nach dem Login kopieren

Erklärung:

  • Der äußere Abschnitt ~^...$~ stellt sicher, dass die Zeichenfolge mit dem gewünschten Muster beginnt und endet.
  • Innerhalb der Klammern , ~?(a(?-1)?b)c~ ist eine positive Lookahead-Behauptung, die prüft, ob eine gleiche Anzahl von as und bs vorhanden ist.
  • ~a ~ stimmt mit einer beliebigen Anzahl von as überein.
  • ~b(?-1)?c~ entspricht einer gleichen Anzahl von bs, gefolgt von cs.
  • Das (?-) in (?-1) ermöglicht es uns, beliebige Sequenzen von as und bs damit abzugleichen erfüllen die Lookahead-Behauptung.

Testfälle:

Wir haben den regulären Ausdruck anhand verschiedener Eingaben getestet, darunter:

  • "aabbcc " - Treffer erfolgreich
  • "aaabbbccc" - Treffer erfolgreich
  • "aaabbbcc" - Treffer fehlgeschlagen (richtig)
  • "aaaccc" - Treffer fehlgeschlagen (richtig)
  • „aabcc“ – keine Übereinstimmung (richtig)
  • „abbcc“ – keine Übereinstimmung (richtig)

Schlussfolgerung:

Diese Regex demonstriert die bemerkenswerte Leistungsfähigkeit moderner regulärer Ausdrücke, die über reguläre Grammatiken hinausgehen und sogar kontextsensitive Grammatiken wie {a^n b^n c^n} abgleichen. Diese Fähigkeit, komplexere Muster zu analysieren, eröffnet neue Möglichkeiten für Regex-Anwendungen.

Das obige ist der detaillierte Inhalt vonKann PCRE kontextsensitive Grammatiken wie {a^n b^n c^n; zuordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!