- Tcl 教程
- Tcl - 首页
- Tcl - 概述
- Tcl - 环境设置
- Tcl - 特殊变量
- Tcl - 基本语法
- Tcl - 命令
- Tcl - 数据类型
- Tcl - 变量
- Tcl - 运算符
- Tcl - 决策
- Tcl - 循环
- Tcl - 数组
- Tcl - 字符串
- Tcl - 列表
- Tcl - 字典
- Tcl - 过程
- Tcl - 包
- Tcl - 命名空间
- Tcl - 文件 I/O
- Tcl - 错误处理
- Tcl - 内置函数
- Tcl 正则表达式
- Tk 教程
- Tk - 概述
- Tk - 环境
- Tk - 特殊变量
- Tk - 窗口部件概述
- Tk - 基本窗口部件
- Tk - 布局窗口部件
- Tk - 选择窗口部件
- Tk - 画布窗口部件
- Tk - Mega 窗口部件
- Tk - 字体
- Tk - 图片
- Tk - 事件
- Tk - 窗口管理器
- Tk - 几何管理器
- Tcl/Tk 有用资源
- Tcl/Tk - 快速指南
- Tcl/Tk - 有用资源
- Tcl/Tk - 讨论
Tcl 正则表达式
Tcl 中使用 "regexp" 命令匹配正则表达式。正则表达式是由包含搜索模式的字符序列组成。它由多个规则组成,下表解释了这些规则及其对应的用法。
序号 | 规则及描述 |
---|---|
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
这里,regex 是命令。稍后我们将了解可选开关。模式是前面提到的规则。搜索字符串是执行正则表达式的实际字符串。完全匹配是任何用于保存匹配正则表达式结果的变量。Submatch1 到 SubMatchn 是可选的子匹配变量,用于保存子匹配模式的结果。
在深入研究复杂的示例之前,让我们来看一些简单的示例。一个包含任何字母的字符串的简单示例。遇到任何其他字符时,正则表达式搜索将停止并返回。
#!/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 - 用于忽略大小写。
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"
执行上述代码后,将产生以下结果:
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