当前位置: 首页 > 工具软件 > regexpp > 使用案例 >

Tcl正则命令之regexp

唐渊
2023-12-01

regexp

regexp ?switches? exp str ?matchVar? ?subMatchVar subMatchVar ...?

判断正则表达式exp是否匹配部分或全部字符串str,如果匹配返回1,否则返回0。如果在str后面指定了其他参数,则视为变量的名称,其中保存的是str中匹配exp的部分。matchVar保存的是所有匹配exp的字符串。

switches为开关,是以“-”开头的字符串,regexp支持的开头有:

开关说明
-about返回一个包含正则表达式信息的列表,而不是尝试匹配正则表达式。列表的第一个元素是子表达式数量。第二个元素是描述正则表达式的各种属性的属性名称列表。此开关主要用于调试。
-expanded启用正则表达式扩展语法,表达式中的空白符和注释将被忽略。与嵌入式选项(?x)相同。
-indices更改子matchVar、subMatchVar中存储的内容。不再存储str中匹配的字符,而是存储一个列表其中包含匹配的字符串在string中的起始和结束位置。
-line开启行敏感匹配。此选项相当于同时指定-linestop和-lineanchor选项。与嵌入式选项(?n)相同。
-linestop嵌入式选项(?p)相同。
-lineanchor嵌入式选项(?w)相同。
-nocase忽略大小写,
-all使正则表达式在字符串中尽可能多地匹配,返回找到的匹配项的总数。如果指定了matchVar、subMatchVar,那么只会保存最后匹配的信息。
-inline将命令结果以列表形式返回,而不是替换到matchVar、subMatchVar变量中,所以当使用此开关时不能指定matchVar、subMatchVar变量。如果与-all一起使用,则会将每次的匹配结果都追加到列表中。
-start index指定匹配正则表达式的字符串str的起始位置。index的取值与string index中索引取值方式相同。使用此开关时,“^”不再匹配行开头,\A则匹配index开始的str子串的开头。
--标记开关结束。后面的参数将被视为exp,即使它以-开头。

简单示例

set multiline a\nAb\nc
regexp a.*b $multiline matched
puts $matched
regexp -expanded "a .*b" $multiline matched
puts $matched
regexp a.* $multiline matched
puts $matched
regexp -line a.* $multiline matched
puts $matched
regexp -line -nocase a.* $multiline matched
puts $matched
regexp -line -all -nocase a.* $multiline matched
puts $matched
regexp -line -all -nocase a.*b$ $multiline matched
puts $matched
regexp -start 1 -line -nocase -inline a.* $multiline
regexp -- -a.* $multiline
regexp -inline -- -a.*  -abcde

 

 类似资料: