2013-07-02 72 views
0

我正在使用以下代碼來匹配文本,如cell ("acf12bcjd6")。引號內的值不斷變化,我必須捕獲所有這些值。我使用的代碼是:嘗試使用正則表達式和foreach匹配文本

foreach searched_data $final {  
    [regexp {cell\(.*\)+} $searched_data match]  
    puts "$match"   
} 

但我得到一個錯誤,說「無法達到匹配,沒有這樣的變量」。我不明白我的錯誤。我是否正確?

+0

難道你不能只使用RegEx存儲'。*'嗎? 'cell \((。*)\)+'然後用'\ 1'來獲取它。此外,似乎你錯過了你的表達空間(或放在一個例子中) –

+0

僅供參考:問題已經開始[here](http://stackoverflow.com/q/17434973/1578604) – Jerry

回答

0

嘗試改用此:

foreach searched_data $final { 
    set match [regexp {cell ?\([^)]*\)} $searched_data] 
    puts "$match" 
} 
+1

什麼是方括號 - '['和']' - 爲? – nurdglaw

+0

@nurdglaw負面角色類? – HamZa

+0

不是那些,'regexp'命令周圍的方括號。 – nurdglaw

1

您的程序失敗,因爲正則表達式模式不匹配的字符串,這樣match沒有被設置。試試這個

foreach searched_data $final { 
    if {[regexp {cell +\(\"(.*)\"\)} $searched_data junk match]} { 
     puts stdout $match 
    } 
} 

該模式假定cell和左括號之間的空格是可選的。我也假設你想剝去引號。