regsub

regsub ?switches? exp str subSpec ?varName?

基于正则表达式匹配执行替换。将正则表达式exp与字符串str匹配,并将str复制到名为varName的变量中。如果未指定varName则返回str。在str复制的过程中,str中匹配exp的字符串将被subSpec替换。如果subSpec中包含&”或“\0”,则使用str中匹配exp的字符串替换“&”和“\0”。如果subSpec包含“\n”(n为1到9的整数),则使用str中与exp第n个圆括号匹配的字符串进行替换。可以通过在“&”、“\0”、“\n”和“\”前加反斜杠“\”来防止特殊转义。subSpec中使用反斜杠经常会影响Tcl解析器的反斜杠使用,所以如果subSpec中使用反斜杠,通常用大括号括起来。

如果regsub的参数以“-”开始,则视为开关,支持的开关如下:

开关 说明
-all 找到所有与exp匹配的字符串并对每个匹配项执行替换。如果不使用此开关,则只替换一个匹配的字符串。如果使用此开关则使用对应的匹配信息对每个替换出路“&”和“\n”序列。
-expanded 启用正则表达式扩展语法,与regexp相同。
-line 开启行敏感匹配,与regexp相同。
-linestop regexp相同。
-lineanchor regexp相同。
-nocase 匹配时不区分大小写,但是替换时subSpec使用未转换的字符串。
-start index 指定匹配正则表达式的字符串str的起始位置,与regexp相同。
-- 标记开关结束。后面的参数将被视为exp,即使它以-开头。

简单示例

set multiline a\nAb\nAcb\nc
regsub a.*b $multiline ad& test
puts $test
regsub -all -nocase a.*?b $multiline ad&
regsub -line -all -nocase a.*b $multiline ad&
regsub -nocase -- -a(.*)c  -Abcde xxx\\1yyy

 

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐