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