Tcl - Espressioni regolari

Il comando "regexp" viene utilizzato per trovare una corrispondenza con un'espressione regolare in Tcl. Un'espressione regolare è una sequenza di caratteri che contiene un modello di ricerca. Consiste di più regole e la tabella seguente spiega queste regole e il relativo utilizzo.

Sr.No. Regola e descrizione
1

x

Corrispondenza esatta.

2

[a-z]

Qualsiasi lettera minuscola da az.

3

.

Qualsiasi personaggio.

4

^

La stringa iniziale dovrebbe corrispondere.

5

$

La stringa finale dovrebbe corrispondere.

6

\^

Sequenza di backlash in modo che corrisponda a caratteri speciali ^. Allo stesso modo è possibile utilizzare per altri caratteri.

7

()

Aggiungi le sequenze sopra tra parentesi per creare un'espressione regolare.

8

x*

Deve corrispondere a 0 o più occorrenze della x precedente.

9

x+

Deve corrispondere a 1 o più occorrenze della x precedente.

10

[a-z]?

Deve corrispondere a 0 o 1 occorrenza della x precedente.

11

{digit}

Corrisponde esattamente alle occorrenze di cifre della precedente espressione regex. Cifra che contiene 0-9.

12

{digit,}

Corrisponde a 3 o più occorrenze di cifre della precedente espressione regolare. Cifra che contiene 0-9.

13

{digit1,digit2}

Occurrences corrisponde all'intervallo tra digit1 e digit2 occorrenze della precedente espressione regex.

Sintassi

La sintassi per regex è fornita di seguito:

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Qui, regex è il comando. Vedremo più avanti gli interruttori opzionali. I modelli sono le regole come accennato in precedenza. La stringa di ricerca è la stringa effettiva su cui viene eseguita la regex. La corrispondenza completa è qualsiasi variabile per contenere il risultato del risultato dell'espressione regolare abbinata. Da SubMatch1 a SubMatchn sono variabili subMatch facoltative che contengono il risultato di modelli di corrispondenza secondaria.

Diamo un'occhiata ad alcuni semplici esempi prima di immergerci in quelli complessi. Un semplice esempio per una stringa con qualsiasi alfabeto. Quando qualsiasi altro personaggio incontra la regex, la ricerca verrà interrotta e restituita.

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"

Quando il codice sopra viene eseguito, produce il seguente risultato:

Full Match: Tcl
Sub Match1: Tcl

Pattern multipli

L'esempio seguente mostra come cercare più modelli. Questo è un modello di esempio per qualsiasi alfabeto seguito da qualsiasi carattere seguito da qualsiasi alfabeto.

#!/usr/bin/tclsh

regexp {([A-Za-z]*).([A-Za-z]*)} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Quando il codice sopra viene eseguito, produce il seguente risultato:

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial

Di seguito viene mostrata una versione modificata del codice precedente per mostrare che un sotto pattern può contenere più pattern:

#!/usr/bin/tclsh

regexp {([A-Za-z]*.([A-Za-z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Quando il codice sopra viene eseguito, produce il seguente risultato:

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Opzioni per il comando Regex

L'elenco degli interruttori disponibili in Tcl sono,

  • nocase - Usato per ignorare le maiuscole.

  • indices - Memorizza la posizione dei modelli secondari abbinati invece dei caratteri abbinati.

  • line- Nuova corrispondenza sensibile alla linea. Ignora i caratteri dopo la nuova riga.

  • start index - Imposta l'offset di inizio del modello di ricerca.

  • Contrassegna la fine degli interruttori

Negli esempi precedenti, ho usato deliberatamente [AZ, az] per tutti gli alfabeti, puoi facilmente usare -nocase invece di come mostrato di seguito -

#!/usr/bin/tclsh

regexp -nocase {([A-Z]*.([A-Z]*))} "Tcl Tutorial" a b c  
puts "Full Match: $a"
puts "Sub Match1: $b"
puts "Sub Match2: $c"

Quando il codice sopra viene eseguito, produce il seguente risultato:

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial

Un altro esempio di utilizzo degli interruttori è mostrato di seguito:

#!/usr/bin/tclsh

regexp -nocase -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b 
puts "Full Match: $a"
puts "Sub Match1: $b"
regexp -nocase -start 4 -line -- {([A-Z]*.([A-Z]*))} "Tcl \nTutorial" a b  
puts "Full Match: $a"
puts "Sub Match1: $b"

Quando il codice sopra viene eseguito, produce il seguente risultato:

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial