Jaka jest kolejność wyrażeń w (..|. .. .|..)
operatora - od lewej do prawej, od prawej do lewej lub coś innego?Zamówienie regularnej operatora ekspresji (.. | .. ... .. | ..)
Odpowiedz
lewej do prawej, a pierwsza alternatywa dopasowane „wygrywa”, inni nie są sprawdzane. Jest to typowe zachowanie w wyrażeniu regularnym NFA. Dobry opis tego zachowania znajduje się pod adresem regular-expressions.info Alternation page.
Zauważ, że RegexOptions.RightToLeft
sprawia tylko silnik regex zbadać ciąg wejściowy z prawej do lewej, modyfikator nie wpływa jak silnik regex przetwarza sam wzór.
Pozwól mi zilustrować: jeśli masz (aaa|bb|a)
regex i spróbować znaleźć odpowiednika w bbac
korzystając Regex.Match
wartość otrzymasz jest bb
bo po bbb
a
alternatywą wydaje. Jeśli używasz Regex.Matches
, dostaniesz wszystkie mecze i oba bb
i a
wyląduje w wynikach.
Również fakt, że wzór regex jest badany od lewej do prawej, wyjaśnia, że w niezablokowanej grupie alternatywnej, kolejność alternatyw ma znaczenie. Jeśli używasz (a|aa|aaa)
regex dopasować przeciwko abbccaa
, pierwszy a
alternatywą będzie dopasowanie każdego a
w ciągu znaków (patrz regex demo). Po dodaniu granic słów możesz umieścić je w dowolnej kolejności (patrz one more regex demo).
- 1. Zamówienie oceny ekspresji w C
- 2. Nazwy symbolicznych grup (jak w języku Python) w regularnej ekspresji Ruby
- 3. usługi dostępu w regularnej klasie
- 4. przekształcania macierzy list do regularnej matrycy
- 5. Tworzenie regularnej siatki Delaunay za pomocą scipy
- 6. Opcja ekspresji Wzrokowo
- 7. LINQ ekspresji jako parametr
- 8. Buduj drzewo binarnej ekspresji
- 9. Runtime tworzenie LINQ ekspresji
- 10. Równoważniki ekspresji Haskella
- 11. Struktura danych drzewa ekspresji
- 12. Zwykły generator/reduktor ekspresji?
- 13. Czy istnieje bardziej elegancki, pytonowy sposób wyrażania następującej ekspresji warunkowej?
- 14. Cytaty kodowe i drzewa ekspresji
- 15. debugowania oceny ekspresji na IntelliJ
- 16. Drzewo oceny ekspresji w Haskell
- 17. Clojurescript: dwie kropki w ekspresji
- 18. oceny ekspresji w R data.table
- 19. Alternatywa ekspresji "Commutativity" w Prologu?
- 20. Sesje grupowania i ekspresji Nodejsa
- 21. Zamówienie wyjścia
- 22. Zamówienie Datagridview.SelectedCells
- 23. C# w operatora przeciążenia
- 24. Konwersja Kotlin za KClass do regularnej klasy w Javie
- 25. Czy mogę/powinienem używać std :: exception's do regularnej obsługi błędów?
- 26. zerowy sprawdzić w JSF języka ekspresji
- 27. Wymień regularny submatch ekspresji przy użyciu funkcji
- 28. Konstruowanie szablonów ekspresji Eigen za pomocą Boost.Proto
- 29. Nielegalne rozpoczęcie prostej ekspresji w Scali
- 30. Ostrzeżenie "Wykorzystanie GNU przedłużenia ekspresji stwierdzenie"
Myślę, że istnieją regex silników, które zawsze biorą najdłuższy mecz, zamiast najpierw tutaj. – Joey
Silniki regex zgodne z POSIX wymagają najdłuższego dopasowania. Również Perl6// pattern1 | pattern2/"pasuje również do najdłuższej alternatywy (jest operator' || ', który działa jak proste' | 'w większości innych smaków, aby uzyskać pierwszą znalezioną alternatywę). –