Premessa
Con il termine espressione regolare (regular expression) si intende una particolare stringa utilizzata come fosse una chiave per identificare, all’interno di un’altra stringa, una o più sottostringhe. In altre parole, questa chiave è una espressione che ci permette di ottenere, da un qualsiasi testo, quelle parti che corrispondono alla descrizione specificata all’interno dell’espressione.
Abbiamo quindi a che fare con una operazione tra stringhe.
Questo strumento è più potente della ricerca con caratteri speciali che abbiamo visto in un precedente articolo in quanto la ricerca delle corrispondenze è molto più sofisticata.
Panoramica sui comandi
Nel linguaggio Tcl ci sono diversi comandi che possono utilizzare le espressioni regolari e per farlo utilizzano l’argomento -regexp.
Ma ci sono due specifici comandi che sono dedicati alla analisi sintattica con le espressioni regolari: il comando regexp e il comando regsub.
Trova (comando regexp)
#sintassi
regexp ?switches? exp string ?matchVar? ?subMatch1 ... subMatchN?
Il comando cerca nella stringa string sulla base della espressione regolare descritta in exp. Se viene definito anche il parametro matchVar allora la parte della stringa che rispetta l’espressione viene copiata nella variabile matchVar.
Se vengono definite anche le variabili subMatch... allora le parti tra parentesi della della stringa che rispetta l’espressione vengono copiate nelle variabili a partire da sinistra verso destra.
Il comando regexp restituisce il numero delle occorrenze trovate.
set myStr "All actions in this life are preceded by mind."
set myExp "life"
set result [regexp $myExp $myStr myVar]
puts "Result is: $result for the word \"$myVar\"."
---
Result is: 1 for the word "life".
Sostituisci (comando regsub)
# sintassi
regsub ?switches? exp string subSpec varName
Il comando cerca nella stringa string sulla base della espressione regolare exp; le parti che risultano corrispondenti al criterio descritto nella espressione regolare exp vengono sostituite con la stringa riportata nell’argomento subSpec; infine la stringa modificata viene copiata nella variabile varName.
Il comando regsub restituisce il numero delle occorrenze trovate.
set myStr "All actions in this life are preceded by mind."
set myExp "life"
set result [regsub $myExp $myStr "world" myVar]
puts "Result is: $result and the new sentence is: \"$myVar\"."
---
Result is: 1 and the new sentence is: "All actions in this world are preceded by mind.".
Regole per costruire espressioni regolari complesse
Le espressioni regolari possono essere espresse sulla base delle seguenti regole:
^confronta l’inizio della stringa$confronta la fine della stringa.il numero dei punti identifica il numero dei caratteri da confrontare*confronta una qualsiasi quantità (anche nulla) dei caratteri che precedono il simbolo+confronta una qualsiasi quantità (ma non nulla) dei caratteri che precedono il simbolo[...]confronta ciascun carattere appartenente all’insieme dei caratteri tra parente quadre[^...]confronta ciascun carattere che non è un membro dell’insieme dei caratteri tra le parentesi quadre che seguono il carattere^(...)raggruppa l’insieme dei caratteri interni asubSpec
set myStr "All actions in this life are preceded by mind. Mind is their chief."
set myExp ".ind"
set result [regsub -all $myExp $myStr "MIND" myVar]
puts "Result is: $result and the new sentence is: \"$myVar\"."
---
Result is: 2 and the new sentence is: "All actions in this life are preceded by MIND. MIND is their chief.".
Nota finale
Con questo articolo abbiamo appreso le prime nozioni di base sull’uso delle espressioni regolari in Tcl.
Per il momento possiamo accontentarci e fermarci qui, rimandando a futuri articoli l’approfondimento su questo tema.
Nel prossimo articolo vedremo cosa si intende per array associativo.
