正则表达式的产生主要是为了字符串的处理。面读一个字符串时,我们感兴趣的信息往往包含在某个关键词上,为了找到这个关键词,程序的做法就是对字符串进行匹配。
正则表达是可以大大简化这种匹配过程。
| 匹配字符 | 描述. |
|---|---|
| . | 点用来匹配任何字符 |
| ^ | 一行的开头 |
| $ | 一行的结束 |
| * | 星号用来匹配任意数目的字符 |
| + | 加号用来匹配至少一个字符 |
| ? | 问号用来匹配至多一个字符 |
| {2,4} | 大括号可以用来更精确地限定字符的数目 |
| 正则表达式 | 描述 |
|---|---|
| [0-9]+ | 匹配正整数 |
| [-+]?[0-9]+(\.[0-9]+)? | 匹配数值,包括小数 |
| [a-zA-Z_0-9]+ | 由字母、数字、下划线组成的单词 |
| ^Error | 以字符串"Error"开始的行 |
| ^[ \t]*$ 或者 ^\s*$ | 匹配空行 |
Tcl 中常用的命令有
set str "This is a cat"
set rv [regexp {is a ([a-z]+)} $str str_match str_1
puts $rv ; # rv = 1
# 匹配到的字符串
puts $str_match ; # str_match = is a cat
# 正则表达式中括号部分对应的字符串
puts $str_1 ; # str_1 = cat
set rv [regexp -inline {is a ([a-z]+)} $str ]
puts $rv ; # rv = {{is a cat} {cat}}
set str "This is a cat, another cat"
# 返回值是替换后的字符串
set str_2 [regsub {cat} $str dog]
# 也可以直接赋值给新的变量
regsub {cat} $str dog str_3
puts $str_2 ; # str_2 = This is a dog, another cat
puts $str_3 ; # str_3 = This is a dog, another cat
# 默认 regsub 只替换第一个遇到的匹配
# 替换所有的匹配可以使用 -all
regsub -all {cat} $str dog $str_4
puts $str_4 ; # str_3 = This is a dog, another dog