Tcl - Reguläre Ausdrücke

Der Befehl "regexp" wird verwendet, um einem regulären Ausdruck in Tcl zu entsprechen. Ein regulärer Ausdruck ist eine Folge von Zeichen, die ein Suchmuster enthält. Es besteht aus mehreren Regeln und die folgende Tabelle erläutert diese Regeln und die entsprechende Verwendung.

Sr.Nr. Regel & Beschreibung
1

x

Genaue Übereinstimmung.

2

[a-z]

Beliebige Kleinbuchstaben von az.

3

.

Beliebiger Charakter.

4

^

Die Anfangszeichenfolge sollte übereinstimmen.

5

$

Die Endzeichenfolge sollte übereinstimmen.

6

\^

Spielsequenz passend zu Sonderzeichen ^. Ähnlich können Sie für andere Zeichen verwenden.

7

()

Fügen Sie die obigen Sequenzen in Klammern hinzu, um einen regulären Ausdruck zu erhalten.

8

x*

Sollte mit 0 oder mehr Vorkommen des vorhergehenden x übereinstimmen.

9

x+

Sollte mit einem oder mehreren Vorkommen des vorhergehenden x übereinstimmen.

10

[a-z]?

Sollte mit 0 oder 1 Vorkommen des vorhergehenden x übereinstimmen.

11

{digit}

Entspricht genau den Ziffernvorkommen des vorherigen regulären Ausdrucks. Ziffer, die 0-9 enthält.

12

{digit,}

Entspricht 3 oder mehr Ziffernvorkommen des vorherigen regulären Ausdrucks. Ziffer, die 0-9 enthält.

13

{digit1,digit2}

Vorkommen entspricht dem Bereich zwischen Vorkommen von Ziffer1 und Ziffer2 des vorherigen regulären Ausdrucks.

Syntax

Die Syntax für Regex ist unten angegeben -

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

Hier ist Regex der Befehl. Wir werden später über optionale Schalter sehen. Muster sind die Regeln, wie bereits erwähnt. Suchzeichenfolge ist die tatsächliche Zeichenfolge, für die der reguläre Ausdruck ausgeführt wird. Vollständige Übereinstimmung ist eine beliebige Variable, die das Ergebnis des übereinstimmenden Regex-Ergebnisses enthält. Submatch1 bis SubMatchn sind optionale SubMatch-Variablen, die das Ergebnis von Sub-Match-Mustern enthalten.

Schauen wir uns einige einfache Beispiele an, bevor wir uns mit komplexen befassen. Ein einfaches Beispiel für eine Zeichenfolge mit beliebigen Alphabeten. Wenn ein anderes Zeichen auf den regulären Ausdruck stößt, wird die Suche gestoppt und zurückgegeben.

#!/usr/bin/tclsh

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

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

Full Match: Tcl
Sub Match1: Tcl

Mehrere Muster

Das folgende Beispiel zeigt, wie Sie nach mehreren Mustern suchen. Dies ist ein Beispielmuster für alle Alphabete, gefolgt von einem beliebigen Zeichen, gefolgt von einem beliebigen Alphabet.

#!/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"

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

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

Eine modifizierte Version des obigen Codes, um zu zeigen, dass ein Untermuster mehrere Muster enthalten kann, wird unten gezeigt -

#!/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"

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

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

Schalter für Regex-Befehl

Die Liste der in Tcl verfügbaren Schalter ist:

  • nocase - Wird verwendet, um Groß- und Kleinschreibung zu ignorieren.

  • indices - Speichern Sie die Position übereinstimmender Untermuster anstelle übereinstimmender Zeichen.

  • line- Neue zeilensensitive Übereinstimmung. Ignoriert die Zeichen nach dem Zeilenumbruch.

  • start index - Legt den Versatz des Starts des Suchmusters fest.

  • Markiert das Ende der Schalter

In den obigen Beispielen habe ich absichtlich [AZ, az] für alle Alphabete verwendet. Sie können einfach -nocase anstelle der unten gezeigten verwenden.

#!/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"

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

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

Ein weiteres Beispiel für die Verwendung von Schaltern ist unten dargestellt.

#!/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"

Wenn der obige Code ausgeführt wird, wird das folgende Ergebnis erzeugt:

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