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
廣告
© . All rights reserved.