TCL模式匹配

时间:2016-09-07 05:48:47

标签: regex tcl

我是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

对于第二个字符串,我希望它显示GETDOT(单独不显示GET)。

我认为这是因为一旦找到匹配项,regexp就会结束搜索。但是如何显示所有模式匹配?

1 个答案:

答案 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"
  }  
}

regexp manual