Tcl常用命令备忘录-正则命令篇

Tcl常用命令备忘录-正则命令篇_第1张图片

 正则表达式是一种用于匹配、查找、替换文本中特定模式的工具。在Tcl脚本中,可以使用正则表达式对字符串进行匹配、查找和替换。

Tcl常用命令备忘录-正则命令篇_第2张图片

regexp

语法: 

regexp ?选项? 正则表达式 字符串 ?变量1 变量2 ...?

其中,?选项?为可选项,可以省略。正则表达式为要匹配的模式,字符串为要匹配的文本。?变量1 变量2 ...?为可选的变量,用于存储匹配结果。

参数说明:

  • 选项:用于控制regexp命令的行为,常用的选项有:
    • -nocase:忽略大小写匹配。
    • -inline:返回匹配结果,而不是返回值。
  • 正则表达式:定义匹配模式的字符串,可以使用各种正则表达式元字符和特殊字符。
  • 字符串:要匹配的字符串。
  • 变量:用于存储匹配结果的变量,可以使用$符号在后续代码中引用。

示例:

1、匹配首尾空格

set str "  Tcl Scripting  "
regexp {^\s*(.*)\s*$} $str match result
puts $result

输出:

Tcl Scripting

解释:

  • 正则表达式{^\s*(.)\s$}中,^表示匹配字符串开头,\s表示匹配零个或多个空格,(.)表示匹配任意字符任意次,\s*$表示匹配零个或多个空格,并匹配字符串结尾。
  • regexp命令将$Str与正则表达式进行匹配,匹配结果存储在变量$result中。
  • 最终输出变量$result的值。

2、查找字符串中的数字

set str "Tcl Scripting 2020"
regexp -inline {\d+} $str match result
puts $result

输出:

2020

解释:

  • 正则表达式{\d+}中,\d表示匹配数字字符,+表示匹配至少一个数字字符。
  • 使用了选项-inline,将匹配结果直接返回。
  • 最终输出变量$result的值。

3、替换字符串中的单词

set str "Tcl Scripting is fun"
set new_str [regsub -nocase {\bis\b} $str "is not"]
puts $new_str

输出:

Tcl Scripting is not fun

解释:

  • 使用了命令regsub,将字符串$str中的\bis\b替换成is not。
  • 选项-nocase表示忽略大小写匹配。
  • 最终输出变量$new_str的值。

4、使用变量存储匹配结果

set str "Tcl Scripting 2020"
set pattern {\d+}
regexp $pattern $str match result
puts "Matched: $result"
set start [lindex $result 0]
set end [lindex $result end]
puts "Start position: $start, end position: $end"

输出:

Matched: 2020
Start position: 13, end position: 16

解释:

  • 将正则表达式存储在变量$pattern中,方便重复使用。
  • 使用regexp命令进行匹配,将匹配结果存储在变量$result中。
  • 输出匹配到的数字,使用lindex命令获取匹配结果的起始位置和结束位置。
  • 输出匹配结果的起始位置和结束位置。

Tcl常用命令备忘录-正则命令篇_第3张图片regsub

语法:

regsub ?-all? ?-nocase? exp string subSpec varName

参数说明:

  • -all:可选参数,表示全局替换所有符合正则表达式的匹配项。
  • -nocase:可选参数,表示忽略大小写。
  • exp:正则表达式。
  • string:目标字符串。
  • subSpec:替换规则。
  • varName:替换后的结果存储在此变量中。

示例:

1、将字符串中的所有数字替换为"#":

set str "hello123world456"
regsub -all {\d} $str "#" result
puts $result

输出:

hello###world###

解释:

\d匹配任何数字,-all选项表示全局替换。

2、将字符串中的所有空格替换为"_":

set str "hello world"
regsub {\s} $str "_" result
puts $result

输出:

hello_world

解释:

\s匹配任何空白字符,包括空格、制表符、换行符等。由于没有使用-all选项,只替换了第一个匹配项。

3、将字符串中的所有单词的首字母大写:

set str "hello world"
regsub -all -- {\w+} $str {string toupper [string index "&" 0]} result
puts $result

输出:

Hello World

解释:

\w+匹配任何单词,string toupper [string index "&" 0]表示将匹配到的字符串的首字母大写。由于使用了-all选项,全局替换。

4、将字符串中的所有"_"后面的字母大写:

set str "hello_world"
regsub -all -- {_([a-z])} $str {string toupper "&"} result
puts $result

输出:

hello_World

解释:

_([a-z])匹配包含"_"后面一个小写字母的子串,string toupper "&"将匹配到的子串全部大写。由于使用了-all选项,全局替换。

5、忽略大小写,将字符串中的所有"abc"替换为"xyz":

set str "abcABCabC"
regsub -nocase -all {abc} $str "xyz" result
puts $result

输出:

xyzXYZxYz

解释:

-nocase选项表示忽略大小写。

你可能感兴趣的:(Tcl,后端,学习)