REGEXP TCL中的多个捕获组

时间:2016-02-23 05:55:04

标签: regex tcl

我想在TCL中的单个regexp中使用多个捕获组,

set var "      abc 123"
regexp -all "^(\s*)(\[a-z\]*)(\s*)(\[0-9\]*)" $var match1 match2 match3 match4

如果是正确的话,请更正我的正则表达式和语法。

我希望获得这样的输出,

puts $match1  ;# Contains multiple spaces
puts $match2  ;# Contains abc
puts $match3  ;# Contains single space
puts $match4  ;# Contains 123

感谢。

1 个答案:

答案 0 :(得分:2)

应该是

regexp -all {^(\s*)([a-z]*)(\s*)([0-9]*)}  $var whole_match match1 match2 match3 match4

或者,

regexp -all "^(\\s*)(\[a-z]*)(\\s*)(\[0-9]*)"  $var whole_match match1 match2 match3 match4

大括号将采用字符的字面含义,但不是双引号。因此,反斜杠和方括号都会在其中进行转义。我们不需要逃离关闭的方括号。