无涯教程-Tcl - 正则表达式

843 阅读1分钟

" regexp"命令用于匹配Tcl中的正则表达式。它由多个规则组成,下表解释了这些规则及其相应的用法。

Sr.No. Rule & Remark
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}

匹配精确数字,包含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"</span><spanclass="pln">puts</span><spanclass="str">"SubMatch1:a"</span><span class="pln"> puts </span><span class="str">"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"</span><spanclass="pln">puts</span><spanclass="str">"SubMatch1:a"</span><span class="pln"> puts </span><span class="str">"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"</span><spanclass="pln">puts</span><spanclass="str">"SubMatch1:a"</span><span class="pln"> puts </span><span class="str">"Sub Match1: b" puts "Sub Match2: $c"

执行以上代码后,将产生以下输出-

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

正则表达式参数

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"</span><spanclass="pln">puts</span><spanclass="str">"SubMatch1:a"</span><span class="pln"> puts </span><span class="str">"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"</span><spanclass="pln">puts</span><spanclass="str">"SubMatch1:a"</span><span class="pln"> puts </span><span class="str">"Sub Match1: b" regexp -nocase -start 4 -line -- {([A-Z].([A-Z]))} "Tcl\nTutorial" a b
puts
"Full Match: a"</span><spanclass="pln">puts</span><spanclass="str">"SubMatch1:a"</span><span class="pln"> puts </span><span class="str">"Sub Match1: b"

执行以上代码后,将产生以下输出-

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

参考链接

www.learnfk.com/tcl-tk/tcl-…