我是TCL编程的新手。我想编写一个tcl代码来检查给定字符串中是否存在任何模式HAT GET DOT,如果存在,我们应该在给定字符串中显示HAT GET DOT中的哪些模式。如果字符串中存在多个模式,则应显示所有匹配的模式。我编写了以下代码,但即使多个模式与给定字符串匹配,它也只显示单个模式。
有人可以帮忙吗?
提前谢谢
代码:
set data1 {asdGETdf ferGETfhgDOT} #data1 is the given string
foreach index $test_data1 {
set result [regexp {ABC|ACC|ADC|AXC} $index match]
puts "\n$index"
if { $result==1} {
puts "MATCH:$match"
} else {
puts "NO MATCH"
}
}
output:-asdGETdf
MATCH:GET
ferGETfhgDOT
MATCH:GET
对于第二个字符串,我希望它显示GET
和DOT
(单独不显示GET
)。
我认为这是因为一旦找到匹配项,regexp就会结束搜索。但是如何显示所有模式匹配?
答案 0 :(得分:1)
只需使用-all
标志即可。我也会稍微更改你的脚本,使用-inline
标志来直接获得结果,而不是依赖match
变量,因为当你得到多个匹配时,它只会保留最后一个比赛。我还修复了代码段中的一些错误。
set data1 {asdGETdf ferGETfhgDOT} ;#data1 is the given string
foreach index $data1 {
set result [regexp -all -inline -- {HAT|GET|DOT} $index]
puts "\n$index"
if {$result != ""} {
puts "MATCH: $result"
} else {
puts "NO MATCH"
}
}