Wie lautet die Priorität der Ausdrücke in (..|. .. .|..)
Operator - von links nach rechts, von rechts nach links oder etwas anderes?Reihenfolge des regulären Ausdrucksoperators (.. | .. ... .. | ..)
Antwort
Von links nach rechts, und die erste Alternative abgestimmt "gewinnt", andere sind nicht überprüft. Dies ist ein typisches NFA-Regex-Verhalten. Eine gute Beschreibung dieses Verhaltens ist unter regular-expressions.info Alternation page verfügbar.
Beachten Sie, dass RegexOptions.RightToLeft
die Regex-Engine nur dazu bringt, die Eingabezeichenfolge von rechts nach links zu untersuchen. Der Modifizierer hat keinen Einfluss darauf, wie die Regex-Engine das Muster selbst verarbeitet.
Lassen Sie mich erläutern: Wenn Sie eine (aaa|bb|a)
regex haben und versuchen, eine Übereinstimmung in bbac
mit Regex.Match
zu finden, der Wert, den Sie erhalten werden, ist bb
weil a
Alternative nach bbb
erscheint. Wenn Sie Regex.Matches
verwenden, erhalten Sie alle Übereinstimmungen, und sowohl bb
als auch a
landen in Ihren Ergebnissen.
Auch die Tatsache, dass das Regex-Muster von links nach rechts untersucht wird, macht deutlich, dass in einer nicht verankerten alternativen Gruppe die Reihenfolge der Alternativen ist. Wenn Sie einen (a|aa|aaa)
Regex verwenden, der mit abbccaa
übereinstimmt, entspricht die erste a
Alternative jedem a
in der Zeichenfolge (siehe regex demo). Sobald Sie Wortgrenzen hinzugefügt haben, können Sie die Alternativen in beliebiger Reihenfolge platzieren (siehe one more regex demo).
- 1. Reihenfolge des rekursiven Baumindex?
- 2. Reihenfolge des Konstruktors und des Kopierkonstruktors
- 3. Reihenfolge der Auswertung des Vergleichsoperators?
- 4. Wie die Reihenfolge des SortedSet
- 5. Reihenfolge und Aufruf des Destruktors
- 6. Reihenfolge des Betriebs mit Rohrleitungen
- 7. Zweck des [^ \ x20- \ X7E] in regulären Ausdrücken
- 8. Was ist die Komplexität des regulären Ausdrucks?
- 9. Reihenfolge Faktor Ebenen in der Reihenfolge des Auftretens in Datensatz
- 10. Ausgabe des Wörterbuchs in alphabetischer Reihenfolge zurückgeben
- 11. Reihenfolge des Symfony-Formulars CollectionType-Feld
- 12. Modulo in der Reihenfolge des Betriebs
- 13. Wie Lade Reihenfolge des Skripts in RequireJS
- 14. Funktioniert die Reihenfolge des Schemas in Node.JS?
- 15. Reihenfolge des Wachstums der folgenden Funktionen
- 16. Erzwingen die Reihenfolge des Einsatzes in gradle
- 17. Reihenfolge des Index für mehrere Spalten
- 18. JNI-Aufrufe verschachtelt mit regulären Java-Aufrufe - was ist die Reihenfolge der Ausführung?
- 19. Wie Whitespace-insensitive Modus des regulären Ausdrucks in PHP aktivieren?
- 20. ssh-rsa Validierung des öffentlichen Schlüssels mit einem regulären Ausdruck
- 21. Maximale Größe/Länge des regulären Ausdrucks in "modernen" Webbrowsern?
- 22. Auf Übereinstimmungsdaten des regulären Ausdrucks von Scala Parser zugreifen
- 23. regulären Ausdruck wird Abhacken wissen letzte Zeichen des Dateinamens
- 24. regulären Ausdruck
- 25. regulären Ausdruck
- 26. Google Formulare regulären Ausdruck
- 27. log4j regulären Ausdruck? [{}}
- 28. identifizieren Zeichen in der richtigen Reihenfolge (Art von regulären Ausdruck) aus einem Array von Zeichenfolgen
- 29. regulären Ausdruck ein XML-Attribut
- 30. mit regulären exp. in Python
Ich denke, es gibt Regex-Motoren, die immer die längste Übereinstimmung, statt der ersten hier nehmen. – Joey
POSIX-konforme Regex-Engines erfordern die längste Übereinstimmung. Auch Perl6 '/ pattern1 | pattern2/'passt auch zur längsten Alternative (es gibt einen' || 'Operator, der in den meisten anderen Varianten als einfaches' | 'funktioniert, um die erste gefundene Alternative zu erhalten). –