Qualcuno sa se Python (qualsiasi versione) usasse gli NFA (Automatismi finiti non deterministici) per valutare le espressioni regolari o utilizza qualche altro meccanismo? Fornire collegamenti/riferimenti, se disponibili.Python usa NFA per la valutazione delle espressioni regolari nel modulo re?
6
A
risposta
5
4
Questo dovrebbe richiedere meno di un ms su una DFA:
$ time python3 -c 'import re; re.match("a?"*25+"a"*25, "a"*25)'
real 0m7.273s
Change 25 con 100 e non terminerà per tutta la vita.
Ecco come appare su un DFA (grep):
$ time echo "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" |grep "a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?a\?aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
real 0m0.063s
c'è una grande discussione del tema in http://swtch.com/~rsc/regexp/regexp1.html
Problemi correlati
- 1. Sicurezza delle espressioni regolari
- 2. Valutazione delle espressioni booleane in Python
- 3. Usa le espressioni regolari (o un altro modulo python) per confrontare testo/caratteri?
- 4. Limitazioni delle espressioni regolari?
- 5. Espressioni regolari nel findstr
- 6. Pulisci espressioni regolari Python
- 7. Espressioni regolari Python O
- 8. Spiegazione delle espressioni regolari per vim
- 9. Corrispondenza delle espressioni regolari Prolog
- 10. segnala prima le opzioni non valide (o usa espressioni regolari) con il modulo argparse python
- 11. Python ricerca di espressioni regolari per la stringa all'inizio della riga nel file di
- 12. Come passare attraverso il processo di valutazione delle espressioni Python?
- 13. Sintassi di Groovy per la corrispondenza delle espressioni regolari
- 14. Espressioni regolari Python - re.search() vs re.findall()
- 15. uso delle espressioni regolari nel gruppo dalla clausola
- 16. Cosa significano "pigro" e "goloso" nel contesto delle espressioni regolari?
- 17. Rappresentare identificatori uso delle espressioni regolari
- 18. Albero di valutazione delle espressioni in Haskell
- 19. Ordine di valutazione delle espressioni in C
- 20. Python espressioni regolari per sostituire tutto, ma le parole specifiche
- 21. Doppia interpolazione delle espressioni regolari in Perl
- 22. Sintassi di espressioni regolari per "corrispondenza nulla"?
- 23. Quale modulo python re a raccogliere per la traduzione di un'espressione regolare Perl
- 24. Negazione delle stringhe utilizzando le espressioni regolari
- 25. I dialetti delle espressioni regolari non sono regolari?
- 26. Sanitizzazione delle espressioni regolari fornite dall'utente in PHP
- 27. Errore di sintassi delle espressioni regolari
- 28. Libreria per verificare se due espressioni regolari sono uguali/isomorfe
- 29. Incoerenza tra espressioni regolari sed e python
- 30. Espressioni regolari in OCaml
Dal momento che la maggior parte dei motori di RE al giorno d'oggi consentono di lingue non regolari da abbinare Dubito che qualsiasi motore RE moderno usi ancora NFA o DFAs. – Joey
Bene, dal momento che un motore RE può identificare un sottoinsieme di RE che sono regolari, e quelli sono di uso comune, ha senso ottimizzare per quegli scenari. Quindi è del tutto possibile che a volte utilizzino NFA o DFA. – MSalters