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