📅  最后修改于: 2020-10-16 06:31:37             🧑  作者: Mango
“ regexp”命令用于匹配Tcl中的正则表达式。正则表达式是包含搜索模式的字符序列。它由多个规则组成,下表解释了这些规则及其相应的用法。
Sr.No. | Rule & Description |
---|---|
1 |
x Exact match. |
2 |
[a-z] Any lowercase letter from a-z. |
3 |
. Any character. |
4 |
^ Beginning string should match. |
5 |
$ Ending string should match. |
6 |
\^ Backlash sequence to match special character ^.Similarly you can use for other characters. |
7 |
() Add the above sequences inside parenthesis to make a regular expression. |
8 |
x* Should match 0 or more occurrences of the preceding x. |
9 |
x+ Should match 1 or more occurrences of the preceding x. |
10 |
[a-z]? Should match 0 or 1 occurrence of the preceding x. |
11 |
{digit} Matches exactly digit occurrences of previous regex expression. Digit that contains 0-9. |
12 |
{digit,} Matches 3 or more digit occurrences of previous regex expression. Digit that contains 0-9. |
13 |
{digit1,digit2} Occurrences matches the range between digit1 and digit2 occurrences of previous regex expression. |
正则表达式的语法如下-
regexp optionalSwitches patterns searchString fullMatch subMatch1 ... subMatchn
在这里,正则表达式是命令。稍后我们将介绍可选开关。模式是前面提到的规则。搜索字符串是在其上执行正则表达式的实际字符串。完全匹配是保存匹配的正则表达式结果的任何变量。 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
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