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
上一篇:
TCL內置函數
下一篇:無