Tcl - 正则表达式


“regexp”命令用于匹配 Tcl 中的正则表达式。正则表达式是包含搜索模式的字符序列。它由多个规则组成,下表解释了这些规则及其相应的用途。

先生。 规则及说明
1

X

完全符合。

2

[阿兹]

az 中的任意小写字母。

3

任何角色。

4

^

起始字符串应该匹配。

5

$

结束字符串应该匹配。

6

\^

用于匹配特殊字符 ^ 的反斜杠序列。类似地,您可以用于其他字符。

7

()

将上述序列添加到括号内以形成正则表达式。

8

X*

应匹配 0 次或多次出现的前面的 x。

9

x+

应匹配前面的 x 出现 1 次或多次。

10

[阿兹]?

应匹配前面的 x 出现 0 次或 1 次。

11

{数字}

精确匹配先前正则表达式中出现的数字。包含 0-9 的数字。

12

{数字,}

匹配先前正则表达式中出现的 3 个或更多数字。包含 0-9 的数字。

13

{数字1,数字2}

出现次数与先前正则表达式的数字 1 和数字 2 出现次数之间的范围相匹配。

句法

正则表达式的语法如下 -

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn

这里,regex 是命令。稍后我们将看到可选开关。模式就是前面提到的规则。搜索字符串是执行正则表达式的实际字符串。完全匹配是保存匹配正则表达式结果的任何变量。Submatch1 到 SubMatchn 是可选的 subMatch 变量,用于保存子匹配模式的结果。

在深入研究复杂的例子之前,让我们先看一些简单的例子。带有任意字母的字符串的简单示例。当正则表达式遇到任何其他字符时,搜索将停止并返回。

#!/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

Regex 命令的开关

Tcl 中可用的开关列表是:

  • nocase - 用于忽略大小写。

  • 索引- 存储匹配子模式的位置而不是匹配字符。

  • line - 新行敏感匹配。忽略换行符之后的字符。

  • 开始索引- 设置搜索模式开始的偏移量。

  • 标记开关的结束

在上面的示例中,我故意对所有字母使用 [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