我想在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
感谢。
答案 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
大括号将采用字符的字面含义,但不是双引号。因此,反斜杠和方括号都会在其中进行转义。我们不需要逃离关闭的方括号。