在文件中我有这样的东西:
name(0) = 123 name(1) = 456 name(2) = 789
我想将匹配字符串写入数组。
for { set i 0 } { $i < 3 } { incr i } {
regexp {name\($i\) =\s+(.*)} $line full($i) name($i)
}
我不知道为什么正则表达式不承认$ i反击。 如果我写:
regexp {name\(0\) =\s+(.*)} $line full($i) name($i)
工作但仅适用于第一个柜台。
答案 0 :(得分:1)
Tcl中的大括号按字面意思引用字符串,因此不进行变量替换。如果要进行变量替换,请使用双引号。由于您引用了正则表达式,因此需要对反斜杠进行转义。
转换:
{name\($i\) =\s+(.*)}
要:
"name\\($i\\) =\\s+(.*)"
或者正如DKF所建议的那样。这样可以更容易地看到没有所有反斜杠的正则表达式
set pattern [format {name\(%d\) =\s+(.*)} $i]
regexp $pattern $line full($i) name($i)
参考文献:Tcl syntax,regex syntax,format