"regexp"命令用于匹配Tcl中的正则表达式.正则表达式是包含搜索模式的字符序列.它由多个规则组成,下表解释了这些规则和相应的用法.
Sr .No. | 规则&说明 |
---|---|
1 | x 完全匹配. |
2 | [az] 来自az的任何小写字母. |
3 | . 任何角色. |
4 | ^ 起始字符串应匹配. |
5 | $ 结束字符串应匹配. |
6 | \ ^ 支持特殊字符的间隙序列^.同样可以用于其他字符. |
7 | () 在括号内添加上述序列以制作正则表达式. |
8 | x * 应该匹配0或更多前面的x. |
9 | x+ 应匹配前一个x的一次或多次出现. |
10 | [az]? 应匹配前一个x的0或1次出现. |
11 | {digit } 匹配前一个正则表达式的完全数字出现次数.包含0-9的数字. |
12 | {digit,} 匹配前一个正则表达式的3位或更多位数.包含0-9的数字. |
13 | {digit1,digit2} 出现次数匹配前一个正则表达式的digit1和digit2次出现之间的范围. |
正则表达式的语法在下面给出 :
regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn
这里,正则表达式是命令.我们稍后会看到可选开关.模式是前面提到的规则.搜索字符串是执行正则表达式的实际字符串.完全匹配是保存匹配的正则表达式结果的任何变量. Submatch1到SubMatchn是可选的subMatch变量,它保存子匹配模式的结果.
让我们看一些简单的例子,然后再深入研究复杂的例子.包含任何字母的字符串的简单示例.当遇到任何其他字符的正则表达式时,搜索将被停止并返回.
#!/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 : 存储匹配的子模式的位置而不是匹配的字符.
行 : 新的线敏感匹配.在换行后忽略字符.
开始索引 : 设置搜索模式开始的偏移量.
标记开关的结尾
在上面的例子中,我故意在所有字母表中使用[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