Regex 正则表达式中的美元符号和新行字符 我知道美元符号用于匹配字符串结尾的字符,以确保搜索不会在字符串中间停止,而是继续到字符串的结尾。
但是它是如何处理换行符的,是在换行符之前匹配还是考虑到了这一点 我在EclipseRegex中检查了它,查找与字符串数组匹配的regexRegex 正则表达式中的美元符号和新行字符 我知道美元符号用于匹配字符串结尾的字符,以确保搜索不会在字符串中间停止,而是继续到字符串的结尾。,regex,Regex,但是它是如何处理换行符的,是在换行符之前匹配还是考虑到了这一点 我在EclipseRegex中检查了它,查找与字符串数组匹配的regex ([A-Za-z]+)$\n有效,而不是相反的([A-Za-z]+\n)$如果模式以换行符结尾,则$通常在该字符之前匹配。这至少适用于Perl、PCRE、Java和.NET。(编辑:正如Tim Pietzker在评论中指出的,\r不被视为.NET的换行符) 这是因为从一行读取的输入以换行符终止(至少在Perl中是这样),这样可以方便地忽略换行符 使用\z表示字
([A-Za-z]+)$\n
有效,而不是相反的([A-Za-z]+\n)$
如果模式以换行符结尾,则$
通常在该字符之前匹配。这至少适用于Perl、PCRE、Java和.NET。(编辑:正如Tim Pietzker在评论中指出的,\r
不被视为.NET的换行符)
这是因为从一行读取的输入以换行符终止(至少在Perl中是这样),这样可以方便地忽略换行符
使用\z
表示字符串的结尾(如果正则表达式引擎支持)
注意
^
和$
是零宽度
标记。因此,它们不匹配任何字符,而是匹配一个位置
^
匹配字符串中第一个字符之前的位置
$
匹配字符串中第一个换行符之前的位置
因此,$
之前的字符串
当然不包括换行符
,这就是为什么您的([A-Za-z]+\n)$
正则表达式失败,而([A-Za-z]+)$\n
成功的原因
简单地说,您的$
后面应该跟一个换行符
,而不是其他字符。请注意,在.NET中,\r
不被视为换行符。请查看全面的解释。好的,是否将换行符视为字符串结尾取决于正则表达式的风格和匹配选项。但这取决于引擎。这对于普通引擎来说是正确的,但是我已经看到了一些小的正则表达式实现,它们在使用$
@tripleee时实际上“吃掉”了换行符。。啊!!不过我到现在还没有经历过那个恶魔。谢谢你的评论,如果你能举个例子,这会更有用。在我的脑海中,我可以指向Procmail,但我记得在很多地方都看到过。在Procmail中,$
是一种文档,用于匹配文字换行符,因此您可以说$
来匹配空行。