Qual è l'ordine di priorità delle espressioni nell'operatore (..|. .. .|..)
: da sinistra a destra, da destra a sinistra o altro?Ordine di operatore di espressioni regolari (.. | .. ... .. | ..)
risposta
Da sinistra a destra e la prima alternativa corrisponde a "vince", altri non vengono controllati. Questo è un tipico comportamento regex di NFA. Una buona descrizione di tale comportamento è fornita a regular-expressions.info Alternation page.
Nota che RegexOptions.RightToLeft
fa in modo che il motore regex esamini la stringa di input da destra a sinistra, il modificatore non influisce sul modo in cui il motore regex elabora il pattern stesso.
Lasciatemi illustrare: se si dispone di una regex (aaa|bb|a)
e cercare di trovare una corrispondenza in bbac
utilizzando Regex.Match
, il valore si ottiene è bb
perché a
alternativa appare dopo bbb
. Se usi Regex.Matches
, otterrai tutte le partite e sia bb
sia a
atterreranno nei risultati.
Inoltre, il fatto che il modello regex sia esaminato da sinistra a destra rende chiaro che all'interno di un gruppo alternativo non ancorato, l'ordine delle alternative è. Se si utilizza un'espressione regolare (a|aa|aaa)
per corrispondere a abbccaa
, la prima alternativa a
corrisponderà a ciascuna a
nella stringa (vedere regex demo). Una volta aggiunti i confini delle parole, è possibile posizionare le alternative in qualsiasi ordine (vedere one more regex demo).
- 1. Operatore Tilde in espressioni regolari
- 2. Unione di espressioni regolari
- 3. python, espressioni regolari, gruppi con nome e operatore "logico"
- 4. Restituzione di espressioni regolari sovrapposte
- 5. Pip ricerca di espressioni regolari
- 6. Notepad ++ espressioni regolari non-golose
- 7. Espressioni e corrispondenza regolari
- 8. Raccontando le eccezioni di espressioni regolari di espressioni in JavaScript
- 9. Generatore di parser di espressioni regolari
- 10. Creazione di matrici di espressioni regolari Javascript
- 11. Dettagli di implementazione di espressioni regolari
- 12. Combinazione di sostituzioni multiple di espressioni regolari
- 13. Comprendere le espressioni regolari
- 14. Alternative alle espressioni regolari
- 15. Espressioni regolari sulla punteggiatura
- 16. MSSQL espressioni regolari
- 17. Espressioni regolari e assemblaggio
- 18. Puzzle con espressioni regolari
- 19. Espressioni regolari Equivalenza
- 20. Espressioni regolari lookahead negativo
- 21. espressioni regolari Fuzzy
- 22. espressioni regolari lookbehind problema
- 23. Sicurezza delle espressioni regolari
- 24. Casse in espressioni regolari
- 25. Espressioni regolari ungreedy
- 26. prove sulle espressioni regolari
- 27. Espressioni regolari in C
- 28. Espressioni regolari Python O
- 29. Espressioni regolari nel findstr
- 30. Java String.replaceTutte espressioni regolari
Penso che ci siano motori regex che hanno sempre la corrispondenza più lunga, invece del primo qui. – Joey
I motori regex conformi a POSIX richiedono la corrispondenza più lunga. Inoltre, Perl6 '/ pattern1 | pattern2/'corrisponde anche l'alternativa più lunga (esiste un operatore' || 'che funziona come un semplice' | 'nella maggior parte degli altri sapori per produrre la prima alternativa trovata). –