2017-05-25 50 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'打造的正則表達式。 –