我是新手,我在使用我的tcl脚本时遇到了一些麻烦。我在网上搜索过,似乎无法理解我做错了什么。这是我写的:
set list {f01-1 f01-2 f02-1 m01-1 m01-2 m02-1}
foreach item $list {
if { [regexp {\w\d\d} $list match ] } {
puts $match
}
}
以下是我得到的输出:
f01
f01
f01
f01
f01
f01
然而,这是我希望并期望得到的:
f01
f01
f02
m01
m01
f02
有没有人对我的期望有任何建议?
提前谢谢你!
答案 0 :(得分:4)
您的代码段似乎与您的实际代码不符,但我猜测$string
与$list
的内容相同,这意味着您需要重复运行原始字符串上的正则表达式,而不是每个项目。此外,你的正则表达式是错误的。以下应该有效:
set list {f01-1 f01-2 f02-1 m01-1 m01-2 m02-1}
foreach item $list {
if { [regexp {\w\d+} $item match ] } {
puts $match
}
}
除了修复正则表达式之外,这里的显着差异是它现在在$item
而不是$list
上运行。
答案 1 :(得分:0)
[regexp {\ w \ d \ d} $ list match] 会尝试在给定的列表中找到指定RE的第一个匹配项。
相反,你应该这样做:
[regexp {\ w \ d \ d} $ item match] 会检查每个项目,并在RE匹配时打印!