2013-11-14 70 views
1

下面的正則表達式只應匹配不以#開始的行,後跟任何內容。正則表達式不匹配新行

^[^#].* 

但是,如果緩衝區之前包含空行,它將匹配下一行,即使它以#開頭。

對於下面的輸入失敗

This line is matched as expected 

# this line should not be matched, but it does if the above line is empty !? 
+1

請注意,您的問題的摘要是誤導性的。從emacs手冊(關於正則表達式):'。' (期間)是一個特殊字符,可以匹配任何單個字符**,除了換行符**。嗅探器的答案告訴你真正的問題是什麼。 – Tobias

+1

另請注意,如果您想跳過源代碼文件中的註釋,還有其他方法。特別是'(eq(syntax-ppss-context(syntax-ppss))'comment)'是你的朋友。如果此表單的計算結果爲true,則可以跳過搜索結果(即繼續搜索而不利用找到的匹配項)。 – Tobias

+2

另請注意,正則表達式'^ [^#]。*'可能很危險。如果文本文件中的行很長,可能會在正則表達式引擎內導致溢出。此外,它可能會顯着減慢搜索速度。最好查找下一行不是以'?#'開始的行,然後搜索你真正在尋找的正則表達式(避免使用'。*')將搜索限制在行尾。 – Tobias

回答

2

你能解決這個問題是這樣的:

^[^#\r\n].* 

與原始表達式^[^#].*的問題是,[^#]是匹配換行符(空行),因此允許點.與空行之後的整行匹配,所以該點實際上並不匹配換行符[^#]是這樣做的。

Regex101 Demo