正则表达式的产生主要是为了字符串的处理。面读一个字符串时,我们感兴趣的信息往往包含在某个关键词上,为了找到这个关键词,程序的做法就是对字符串进行匹配。
正则表达是可以大大简化这种匹配过程。
匹配字符 | 描述. |
---|---|
. | 点用来匹配任何字符 |
^ | 一行的开头 |
$ | 一行的结束 |
* | 星号用来匹配任意数目的字符 |
+ | 加号用来匹配至少一个字符 |
? | 问号用来匹配至多一个字符 |
{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