tcl 正则表达式循环匹配

大哥大姐帮我问一下,tcl 正则表达式循环匹配?

想用TCL的正则表达式regexp 多次匹配字符串,类似perl 的正则表达式的g

set str="
A1111.dat
A2222.dat
A333.dat
A4444.dat"

set num [regexp -all {(A.*\.dat)} $str Matchstring]
puts "num = $num"
puts [lindex $Matchstring 0]
puts [lindex $Matchstring 1]
puts [lindex $Matchstring 2]

这样能多次匹配到字符串,但是num变量得到的是“是否匹配成功”,而不是匹配到了多少个,没办法写循环。我怎么才能知道匹配到了多少个??
perl 中使用/g可以取出所有匹配项放入list的。这个问题已解决了,但不知是否最好的解决方法。
set bSuccess [regexp -all {(Sub_.*\.dat)} $allBuffer allFiles]
#上面bSuccess保存是否匹配成功,
#allFiles 保存匹配上的所有内容
if { $bSuccess == 1 } {
foreach oneFile $allFiles {
# 这里就可以遍历所有匹配上的内容了
}
最新回答
口拙嘴笨

2024-09-22 15:20:19

虽然Tcl我不会,但是我有个想法不知道能不能帮上楼主。
在perl中/g并不是一次就全部匹配的,而是从上次匹配的结束处开始尝试新的匹配。
猜测Tcl也行
你看看这样行不行(我不会Tcl语法,就当c写了)
while($num)
{
puts [lindex $Matchstring i]
i++
}