1
下面的正則表達式只應匹配不以#開始的行,後跟任何內容。正則表達式不匹配新行
^[^#].*
但是,如果緩衝區之前包含空行,它將匹配下一行,即使它以#開頭。
對於下面的輸入失敗
This line is matched as expected
# this line should not be matched, but it does if the above line is empty !?
下面的正則表達式只應匹配不以#開始的行,後跟任何內容。正則表達式不匹配新行
^[^#].*
但是,如果緩衝區之前包含空行,它將匹配下一行,即使它以#開頭。
對於下面的輸入失敗
This line is matched as expected
# this line should not be matched, but it does if the above line is empty !?
你能解決這個問題是這樣的:
^[^#\r\n].*
與原始表達式^[^#].*
的問題是,[^#]
是匹配換行符(空行),因此允許點.
與空行之後的整行匹配,所以該點實際上並不匹配換行符[^#]
是這樣做的。
請注意,您的問題的摘要是誤導性的。從emacs手冊(關於正則表達式):'。' (期間)是一個特殊字符,可以匹配任何單個字符**,除了換行符**。嗅探器的答案告訴你真正的問題是什麼。 – Tobias
另請注意,如果您想跳過源代碼文件中的註釋,還有其他方法。特別是'(eq(syntax-ppss-context(syntax-ppss))'comment)'是你的朋友。如果此表單的計算結果爲true,則可以跳過搜索結果(即繼續搜索而不利用找到的匹配項)。 – Tobias
另請注意,正則表達式'^ [^#]。*'可能很危險。如果文本文件中的行很長,可能會在正則表達式引擎內導致溢出。此外,它可能會顯着減慢搜索速度。最好查找下一行不是以'?#'開始的行,然後搜索你真正在尋找的正則表達式(避免使用'。*')將搜索限制在行尾。 – Tobias