位置:首页 > 脚本语言 > Tcl在线教程 > TCL正则表达式

TCL正则表达式

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