Tcl 正则表达式

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之间的范围。

语法

正则表达式的语法如下所示−

regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn
Bash

这里,regex是一个命令。我们稍后会讲到可选开关。Patterns是之前提到的规则。Search string是实际的字符串,在其上执行正则表达式。Full match是一个变量,用于保存匹配的正则表达式结果。Submatch1到Submatchn是可选的子匹配变量,用于保存子匹配模式的结果。

在深入研究复杂示例之前,让我们先看几个简单的示例。一个简单的示例是匹配任何包含字母的字符串。当遇到任何其他字符时,正则表达式的搜索将停止并返回结果。

#!/usr/bin/tclsh

regexp {([A-Za-z]*)} "Tcl Tutorial" a b 
puts "Full Match: a"
puts "Sub Match1:b"
Bash

当上述代码执行时,它产生以下结果 –

Full Match: Tcl
Sub Match1: Tcl
Bash

多个模式

下面的示例展示了如何搜索多个模式。这是一个示例模式,可以由任何字母后跟任何字符,再跟任何字母。

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

当执行上面的代码时,它会产生以下结果:

Full Match: Tcl Tutorial
Sub Match1: Tcl
Sub Match2: Tutorial
Bash

下面显示了以上代码的修改版本,以显示子模式可以包含多个模式 –

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

在执行上述代码时,会产生以下结果−

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial
Bash

正则表达式命令的开关

在Tcl中可用的开关列表如下:

  • nocase - 用于忽略大小写。

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

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

  • start index - 设置搜索模式的起始偏移量。

  • 标记开关的结束。

在上面的示例中,我故意使用了[A-Z, a-z]来表示所有字母,您可以轻松使用-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"
Bash

当上述代码被执行时,会产生以下结果 –

Full Match: Tcl Tutorial
Sub Match1: Tcl Tutorial
Sub Match2: Tutorial
Bash

下面展示了另一个使用开关的示例−

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

当执行上述代码时,它会产生以下结果−

Full Match: Tcl 
Sub Match1: Tcl 
Full Match: Tutorial
Sub Match1: Tutorial
Bash

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册