2013-11-14 75 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