如何在regexp表达式(TCL)

时间:2017-05-25 13:04:29

标签: 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 个答案:

答案 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 syntaxregex syntaxformat