首先,您使用正則表達式是不是做得正確的事情擺在首位,因爲[^country]
匹配設置在country
包括除信件的一切字符(所以從h
匹配僅在eth1
之後,因爲之後需要有country
)。
默認情況下,Tcl使用整個字符串進行匹配,換行符只是普通字符。 (也可以通過指定-line
來使它們變得特殊,但默認情況下它是不可用的。)這意味着如果我使用整個字符串並通過regexp
用正則表達式提供它,它就可以工作(嗯,您可能想要在某些時候)。這意味着你的真正的問題是在提交正確的字符串來匹配。
如果您一次呈現一行(可能是從文件中讀取),並且您希望針對一行使用匹配來觸發下一行的處理,則需要在正則表達式匹配之外進行一些處理:
set found_country 0
while {[gets $channel line] >= 0} {
if {$found_country} {
# Process the data...
puts "post-country data is $line"
# Reset the flag
set found_country 0
} elseif {[regexp {(.*) country$} $line -> leading_bits]} {
# Process some leading data...
puts "pre-country data is $leading_bits"
# Set the flag to handle the next line specially
set found_country 1
}
}
如果要完全跳過空白行,請在if {$found_country} ...
之前加上if {$line eq ""} continue
。
最後一點,用'continue'是因爲我無法確定輸入數據中是否有空行。雖然它很容易處理。 – 2012-08-10 08:20:42