REGEXP TCL 中的多个捕获组

Multiple Capture Group in REGEXP TCL

我想在 TCL 中的单个正则表达式中使用多个捕获组,

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

谢谢。

应该是

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

大括号会取字符的字面意思,但双引号不会。因此,反斜杠和方括号在其中被转义了。我们不需要转义右方括号。