我试图在字符串
中多次出现匹配子字符串str1 = st1.st2.{k}.st3.{k}.st4.{k}.
str2 = st1.st2.{k}.st3.{k}.st4.
我使用regexp匹配str1:
末尾的"{k}"
regexp .*\.\{k\}\.$ $str1
但是我得到了0 !! 实际上我使用regsub来测试正则表达式
regsub {.*\.\{k\}\.$} $str {}
结果==>空
如果模式匹配,匹配的字符串将被删除!! regexp表达式中缺少什么?
答案 0 :(得分:2)
在您的代码中,regexp
仅返回值1,而不是0.如果要匹配最后一次出现的.{k}.
,则必须继续进行子匹配才能得到什么你要。
set str1 st1.st2.{k}.st3.{k}.st4.{k}.
puts [regexp ".*(\.{k}\.)" $str1 whole last]
puts $last
输出
1
.{k}.
$
符号不是必须指定行尾,因为我们只想匹配最后一次出现。
使用regsub
,您应该使用反向引用来捕获第一组,以便可以正确替换它。
puts [regsub "(.*)(\.{k}\.)" $str1 "\\1"]
输出
st1.st2.{k}.st3.{k}.st4
regsub {.*\.\{k\}\.$} $str {}
有什么问题?
好吧,模式.*\.\{k\}\.$
将匹配整个字符串,并且您将用空字符串替换它,这就是您获得空结果的原因。