Tcl 正则表达式
“regexp”命令用于在Tcl中匹配正则表达式。正则表达式是一个包含搜索模式的字符序列。它由多个规则组成,下表解释了这些规则及其对应的用法。
序号 | 规则与描述 |
---|---|
1 | x 精确匹配。 |
2 | [a-z] 任意小写字母a-z。 |
3 | . 任意字符。 |
4 | ^ 起始字符串应匹配。 |
5 | $ 终止字符串应匹配。 |
6 | \^ 反斜杠序列匹配特殊字符^。类似地,您可以用于其他字符。 |
7 | () 在括号内添加上述序列以创建正则表达式。 |
8 | x* 应与先前的x的0个或多个出现匹配。 |
9 | x+ 应与先前的x的1个或多个出现匹配。 |
10 | [a-z]? 应与先前的x的0个或1个出现匹配。 |
11 | {digit} 匹配上一个正则表达式的digit次数。digit包含0-9。 |
12 | {digit,} 匹配上一个正则表达式的3个或多个digit次数。digit包含0-9。 |
13 | {digit1,digit2} 次数匹配先前的正则表达式的digit1和digit2之间的范围。 |
语法
正则表达式的语法如下所示−
这里,regex是一个命令。我们稍后会讲到可选开关。Patterns是之前提到的规则。Search string是实际的字符串,在其上执行正则表达式。Full match是一个变量,用于保存匹配的正则表达式结果。Submatch1到Submatchn是可选的子匹配变量,用于保存子匹配模式的结果。
在深入研究复杂示例之前,让我们先看几个简单的示例。一个简单的示例是匹配任何包含字母的字符串。当遇到任何其他字符时,正则表达式的搜索将停止并返回结果。
当上述代码执行时,它产生以下结果 –
多个模式
下面的示例展示了如何搜索多个模式。这是一个示例模式,可以由任何字母后跟任何字符,再跟任何字母。
当执行上面的代码时,它会产生以下结果:
下面显示了以上代码的修改版本,以显示子模式可以包含多个模式 –
在执行上述代码时,会产生以下结果−
正则表达式命令的开关
在Tcl中可用的开关列表如下:
- nocase - 用于忽略大小写。
-
indices - 存储匹配子模式的位置,而不是匹配的字符。
-
line - 新行敏感匹配。忽略换行符后的字符。
-
start index - 设置搜索模式的起始偏移量。
-
标记开关的结束。
在上面的示例中,我故意使用了[A-Z, a-z]来表示所有字母,您可以轻松使用-nocase代替,如下所示:
当上述代码被执行时,会产生以下结果 –
下面展示了另一个使用开关的示例−
当执行上述代码时,它会产生以下结果−