Differenze tra le versioni di "Espressioni regolari"

tabelle
(tabelle)
Nota che ogni lettera può corrispondere ad un'espressione regolare.
'''TODO''' definire precedenza degli operatori * | concatenzione formalmente.
{|{{prettytable}}
'''espressione''' '''significato'''
!Espressione
abc abc (concatenazione di stringhe)
!Significato
(e) e (operatore per definire precedenza)
|-
(a|b) a oppure b
|abc
a* a ripetuto 0 o più volte
|abc (concatenazione di stringhe)
a? a ripetuto 1 o più volte
|-
|(e)
|e (operatore per definire precedenza)
|-
|<nowiki>(a|b)</nowiki>
|a oppure b
|-
|a*
|a ripetuto 0 o più volte
|-
|a?
|a ripetuto 1 o più volte
|}
====Esempi di precedenza====
{|{{prettytable}}
'''espressione''' '''significato'''
!Espressione
aa* (a)(a*)
!Significato
aa|bb (aa)|(bb)
|-
aa|bb* (aa)|((bb)*)
|aa*
|(a)(a*)
|-
|aa|bb
|(aa)|(bb)
|-
|aa|bb*
|(aa)|((bb)*)
|}
 
===Estensioni delle regole===
{|{{prettytable}}
'''espressione''' '''significato'''
!Espressione
a+ a ripetuto 1 o più volte
!Significato
equivale a: (aa*)
|-
a{1,3} a ripetuto da 1 a tre volte
|a+
equivale a: (a|aa|aaa)
|a ripetuto 1 o più volte
a{3,} al meno tre a
equivale a: (aaaaa*)
|-
[abc] uno qualsiasi dei '''caratteri''' a, b, o c
|a{1,3}
Nota che abc non sono espressioni ma singoli caratteri
|a ripetuto da 1 a tre volte
equivale a: (a|b|c)
equivale a: (a|aa|aaa)
[0-9] uno qualsiasi dei caratteri nell'intervallo.
|-
L'intervallo è calcolato sui codici ASCII
|a{3,}
equivalente a:(0|1|2|3|4|5|6|7|8|9)
|almeno tre a
[^a-z] tutti i caratteri non compresi nell'intervallo
equivale a: (aaa*)
equivalente: troppo lungo da scrivere...
|-
. tutti i caratteri (di solito è escluso l'a capo \n)
|[abc]
equivalente: troppo lungo da scrivere...
|uno qualsiasi dei '''caratteri''' a, b, o c
^ inizio riga
Nota che abc non sono espressioni ma singoli caratteri
equivalente: non esiste
equivale a: (a|b|c)
$ fine riga
|-
equivalente: non esiste
|[0-9]
|uno qualsiasi dei caratteri nell'intervallo.
L'intervallo è calcolato sui codici ASCII
equivalente a:(0|1|2|3|4|5|6|7|8|9)
|-
|[^a-z]
|tutti i caratteri non compresi nell'intervallo
tra la a minuscola e la z minuscola
|-
| .
|tutti i caratteri (di solito è escluso l'a capo \n)
equivalente: troppo lungo da scrivere...
|-
|^
|inizio riga
equivalente: non esiste
|-
|$
|fine riga
equivalente: non esiste
|}
 
Questi ultimi due simboli non hanno un equivalente in termini di regole base. Nota che data la riga (''\n'' indica il carattere di a capo)
riga\n
le due espressioni sono differenti
{|{{prettytable}}
'''espressione''' '''stringa riconosciuta'''
!Espressione
a\n a\n
!Stringa riconosciute
a$ a
|-
|a\n
|a\n
|-
|a$
|a
|}
 
Questo è importante poiché in molte situazioni la stringa riconosciuta può essere letta da un'apposita variabile. (es vim, flex, perl)
 
==Esempi==
La maggior parte delle espressioni regolari riconosce insiemi di stringhe con cardinalità infinita, per questo il più delle volte verrano elencate solo alcune delle stringhe riconosciute
{|{{prettytable}}
'''espressione''' '''stringhe riconosciute'''
!Espressione
^[^ ]* la prima parola di una riga
!Stringhe riconosciute
^.*$ una riga intera
|-
(.|\n){20,20} una stringa di esattamente 20 caratteri
|^[^ ]*
|la prima parola di una riga
|-
|^.*$
|una riga intera
|-
|<nowiki>(.|\n){20,20}</nowiki>
|una stringa di esattamente 20 caratteri
|}
 
==(F)lex e le espressioni regolari==
 
==Bibliografia==
* J.E. Hopcroft, R. Motwani, J.D. Ullman : ''Introduction to Automata Theory, Languages, and Computation'', Addison-Wesley, 2001. ISBN 0201441241