Tcl - 正则表达式

"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