TCL正規表示式


Tcl所述“正規表示式”命令用於匹配正規表示式中使用。正規表示式是一個字元序列,它包含一個搜尋模式。它由多個規則如下面的表格解釋了這些規則和相應的使用。

SN 規則 描述
1 x 精確匹配。
2 [a-z] 從任何小寫字母 a-z.
3 . 任何字元。
4 ^ 開始字串匹配
5 $ 結尾字串匹配
6 \^ 間隙序列匹配特殊字元^。同樣,可以使用其它字元。
7 () 新增上述序列內括號使正規表示式。
8 x* 應該匹配0或多次出現在x前。
9 x+ 應該匹配1次或多次出現在x的前面。
10 [a-z]? 應該匹配0或1在發生x之前。
11 {digit} 完全匹配位數的正規表示式之前出現。數位包含0-9。
12 {digit,} 匹配前面的正規表示式的3個或更多的數位出現。數位包含0-9。
13 {digit1,digit2} 發生匹配digit1和digit2 在正規表示式以前的事件之間的範圍內。

語法

正規表示式的語法如下。

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

這裡,正規表示式是命令。我們將看到有關可選開關後。模式是如前面提到的規則。搜尋字串是其進行的正規表示式的實際字串。精確匹配任何可變持有的正規表示式匹配結果的結果。 Submatch1到SubMatchn是持有次級匹配模式的結果可選的子變數。

在深入複雜的之前,讓我們來看看一些簡單的例子。一個字串中的任何字母。當任何字元遇到正規表示式的搜尋時將被停止,並返回。

#!/usr/bin/tclsh

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

當執行上面的程式碼,產生以下結果:

Full Match: Tcl
Sub Match1: Tcl

多種模式

下面的例子演示了如何搜尋多個模式。這是任意字元後跟任何字母的任何字的母模式例子。

#!/usr/bin/tclsh

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

當執行上面的程式碼,產生以下結果:

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

上面的程式碼修改版本,以表明一個子模式可以包含多個模式如下所示。

#!/usr/bin/tclsh

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

當執行上面的程式碼,產生以下結果:

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

選擇正規表示式的命令

選擇在Tcl中提供的列表是,

  • -nocase : 用於忽略大小寫。

  • -indices : 匹配的子模式,而不是匹配的字元儲存的位置。

  • -line : 新行敏感匹配。換行後忽略字元。

  • -start index : 搜尋模式開始設定偏移

  • -- : 標誌著開關的結束

在上面的例子中,特意用[AZ,az]所有字母,可以使用-nocase代替,如下圖所示。

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

當執行上面的程式碼,產生以下結果:

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

使用選擇的另一個例子如下所示。

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

當執行上面的程式碼,產生以下結果:

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