Betrachten Sie eine Regex-Sprache mit dem gierigen Quantifizierer , dem nicht-gierigen Quantifizierer ∗ ? , geordnete Wechsel- und Charakterklassen. (Dies ist im Wesentlichen eine Subsprache von PCRE ohne Rückreferenzen, umschauende Behauptungen oder einige der anderen schickeren Teile.)
Eine Übereinstimmung für einen regulären Ausdruck R auf einer Zeichenkette s = s 0 … s n ist ein halboffenes Intervall über N, so dass s a 0 … s a 1 - 1 von R akzeptiert wird .
Wir geben eine rekursive Definition dessen, was eine Übereinstimmung besser macht als eine andere. Eine Übereinstimmung für Regex R in einer Zeichenfolge ist besser als eine andere Übereinstimmung b = [ b 0 , b 1 ) wenn a 0 < b 0 oder wenn a 0 = b 0 und:
Wenn eine Zeichenklasse ist: Zeichenklassen haben eindeutige Übereinstimmungen, sodass alle Übereinstimmungen an derselben Position für R gleich sind. Daher ist dieser Fall unmöglich.
Wenn :
- Der führende Teil von passt besser zu S als der führende Teil von b oder
- Die führenden Teile von und b stimmen gleich gut mit S überein , und der hintere Teil von a passt besser zu T als der hintere Teil von b .
Wenn :
- ist eine Übereinstimmung für S und b ist nicht oder
Alle anderen syntaktischen Formen werden aus Gründen der Übereinstimmungspriorität auf die obigen drei reduziert:
Diese unendlichen Muster werden nur zu Zwecken der Übereinstimmungspriorität verwendet - sie sind nicht Teil der betrachteten Übereinstimmungssprache.
Die "bessere" Beziehung ist eine schwache lineare Ordnung über alle möglichen Übereinstimmungen für ein gegebenes Muster.
Bearbeiten: Dies ist eine vollständige Überarbeitung der Frage, um zu klären, was gestellt wurde.
a+?
) ist immer noch {a ^ n: n≥1}. Wenn Sie eine nicht verankerte Regex-Übereinstimmung durchführen (z. B. 'aaaa' =~ /a+?/
in Perl), erhalten Sie keine aaaa
Ergebnisse. Dies liegt jedoch nur daran, dass Zweige in einer anderen Reihenfolge als versucht werden a+
. Wenn Sie es mit Ankern (wie 'aaaa' =~ /^a+?\z/
in Perl) richtig machen, erhalten Sie aaaa
als Ergebnis.
//g
in Perl) zurückgeben würde?
\tt
hindert LaTeX nicht daran, Sonderzeichen und Kontrollsequenzen zu interpretieren!)