- Tcl 教程
- Tcl - 首頁
- Tcl - 概述
- Tcl - 環境設定
- Tcl - 特殊變數
- Tcl - 基本語法
- Tcl - 命令
- Tcl - 資料型別
- Tcl - 變數
- Tcl - 運算子
- Tcl - 決策
- Tcl - 迴圈
- Tcl - 陣列
- Tcl - 字串
- Tcl - 列表
- Tcl - 字典
- Tcl - 過程
- Tcl - 包
- Tcl - 名稱空間
- Tcl - 檔案 I/O
- Tcl - 錯誤處理
- Tcl - 內建函式
- Tcl 正則表示式
- Tk 教程
- Tk - 概述
- Tk - 環境
- Tk - 特殊變數
- Tk - 視窗部件概述
- Tk - 基本視窗部件
- Tk - 佈局視窗部件
- Tk - 選擇視窗部件
- Tk - 畫布視窗部件
- Tk - Mega 視窗部件
- Tk - 字型
- Tk - 圖片
- Tk - 事件
- Tk - 視窗管理器
- Tk - 幾何管理器
- Tcl/Tk 有用資源
- Tcl/Tk - 快速指南
- Tcl/Tk - 有用資源
- Tcl/Tk - 討論
Tcl 正則表示式
Tcl 中使用 "regexp" 命令匹配正則表示式。正則表示式是由包含搜尋模式的字元序列組成。它由多個規則組成,下表解釋了這些規則及其對應的用法。
| 序號 | 規則及描述 |
|---|---|
| 1 | x 精確匹配。 |
| 2 | [a-z] 任何小寫字母 a-z。 |
| 3 | . 任何字元。 |
| 4 | ^ 字串開頭應匹配。 |
| 5 | $ 字串結尾應匹配。 |
| 6 | \^ 反斜槓序列,用於匹配特殊字元 ^。同樣,您可以對其他字元使用。 |
| 7 | () 將上述序列放在括號內以構成正則表示式。 |
| 8 | x* 應匹配前面 x 的 0 次或多次出現。 |
| 9 | x+ 應匹配前面 x 的 1 次或多次出現。 |
| 10 | [a-z]? 應匹配前面 x 的 0 次或 1 次出現。 |
| 11 | {digit} 匹配前面正則表示式的精確 digit 次出現。digit 包含 0-9。 |
| 12 | {digit,} 匹配前面正則表示式的 3 次或更多 digit 次出現。digit 包含 0-9。 |
| 13 | {digit1,digit2} 匹配次數在前面正則表示式 digit1 和 digit2 次出現之間。 |
語法
正則表示式的語法如下所示:
regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn
這裡,regex 是命令。稍後我們將瞭解可選開關。模式是前面提到的規則。搜尋字串是執行正則表示式的實際字串。完全匹配是任何用於儲存匹配正則表示式結果的變數。Submatch1 到 SubMatchn 是可選的子匹配變數,用於儲存子匹配模式的結果。
在深入研究複雜的示例之前,讓我們來看一些簡單的示例。一個包含任何字母的字串的簡單示例。遇到任何其他字元時,正則表示式搜尋將停止並返回。
#!/usr/bin/tclsh
regexp {([A-Za-z]*)} "Tcl Tutorial" a b
puts "Full Match: $a"
puts "Sub Match1: $b"
執行上述程式碼後,將產生以下結果:
Full Match: Tcl Sub Match1: Tcl
多個模式
以下示例演示如何搜尋多個模式。這是一個任何字母后跟任何字元再後跟任何字母的示例模式。
#!/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"
執行上述程式碼後,將產生以下結果:
Full Match: Tcl Tutorial Sub Match1: Tcl Sub Match2: Tutorial
下面顯示了上述程式碼的修改版本,用於說明子模式可以包含多個模式:
#!/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"
執行上述程式碼後,將產生以下結果:
Full Match: Tcl Tutorial Sub Match1: Tcl Tutorial Sub Match2: Tutorial
正則表示式命令的開關
Tcl 中可用的開關列表如下:
nocase - 用於忽略大小寫。
indices - 儲存匹配子模式的位置而不是匹配的字元。
line - 對換行符敏感的匹配。忽略換行符後的字元。
start index - 設定搜尋模式開始的偏移量。
標記開關的結束
在上面的示例中,我故意對所有字母都使用了 [A-Z, a-z],您可以輕鬆地使用 -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