簡體   English   中英

tcl:正則表達式匹配在字符串末尾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM