我使用下面的代码来搜索特定的数据,并将其存储在一个变量。
foreach searched $names {
[regexp {[cell]+} $searched match]
}
这里的名字是有很多数据的变量。 我收到一条错误消息: Error: invalid command name "1.
我是新来的TCL,所以我不能弄清楚什么是错是我的代码是正确的,将它的工作谢谢
我使用下面的代码来搜索特定的数据,并将其存储在一个变量。
foreach searched $names {
[regexp {[cell]+} $searched match]
}
这里的名字是有很多数据的变量。 我收到一条错误消息: Error: invalid command name "1.
我是新来的TCL,所以我不能弄清楚什么是错是我的代码是正确的,将它的工作谢谢
您的正则表达式正在评估第一和regexp {[cell]+} $searched match
返回1
,其然后变成:
[1]
这是一个无效的命令。 去掉方括号:
regexp {[cell]+} $searched match
现在,我不认为你正确地使用正则表达式。 这将寻找任何组合的c
, e
和l
至少一次,这意味着它会接受cell
, lec
甚至c
孤单。 你可能想:
regexp {((?:cell)+)} $searched match matched
这将匹配cell
, cellcell
, cellcellcell
等,并将其存储在变量matched
。
括号用来捕获匹配组; 这些(?: ...)
是针对非捕获组。
编辑:按照我的意见,我会做这样的事情:
set newlist [list]
foreach searched $names {
regexp {cell\s*\("([^"]+)"\)} $searched match matched
lappend $newlist $matched
}
现在,该列表$ newlist包含所有匹配的值。 你可以做一个foreach来显示所有的人;
foreach n $newlist {puts $n}
基于您的评论和杰里的回答,我想你需要
regexp -- {(?:cell)\s+?(\("\w+"\))} $searched -> matched_part_in_brakets
puts $matched_part_in_brakets
要么
regexp -- {(?:cell)\s+?(\("\w+"\))} $searched match matched_part_in_brakets
puts $matched_part_in_brakets