[英]tcl: regexp match subsring at the end of string
我試圖匹配子字符串在字符串中出現了很多次
str1 = st1.st2.{k}.st3.{k}.st4.{k}.
str2 = st1.st2.{k}.st3.{k}.st4.
我使用regexp在str1的末尾匹配"{k}"
:
regexp .*\.\{k\}\.$ $str1
但是我有0! 實際上,我使用regsub來測試regexp
regsub {.*\.\{k\}\.$} $str {}
結果==>空
如果模式匹配,匹配的字符串將被刪除! 正則表達式中缺少什么?
在您的代碼中,正則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\\}\\.$
將匹配整個字符串,並且您將其替換為空字符串,這就是為什么得到空結果的原因。
參考: 非捕獲子模式
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.