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