2017-05-25 25 views
0

在文件我有这样的事情:如何使用数组变量的正则表达式表达(TCL)

 
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) 

工作,但只为第一个计数器。

回答

1

Tcl中的花括号直接引用字符串,所以没有变量替换完成。如果您想要变量替换,请使用双引号。由于您引用了正则表达式,反斜杠将需要转义。

转换:

{name\($i\) =\s+(.*)} 

要:

"name\\($i\\) =\\s+(.*)" 

或者作为DKF已建议。这使得它更容易看到的正则表达式没有所有的反斜线

set pattern [format {name\(%d\) =\s+(.*)} $i] 
regexp $pattern $line full($i) name($i) 

参考文献:Tcl syntaxregex syntaxformat

+0

这可能是更容易使用'subst'或'format'打造的正则表达式。 –