📜  Tcl-正则表达式

📅  最后修改于: 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