我知道美元符号用于匹配字符串末尾的字符,以确保搜索不会停留在字符串的中间,而是继续直到字符串的结尾。
但是它如何处理换行符,它是否恰好在新行字符之前匹配,还是将其考虑在内。
我在eclipse正则表达式中检查了它,以获得匹配字符串数组的正则表达式
([A-Za-z ]+)$\n
工作,而不是相反([A-Za-z ]+\n)$
答案 0 :(得分:14)
请注意,^
和$
是zero-width
令牌。因此,它们与任何字符都不匹配,而是匹配position
。
^
匹配字符串中第一个字符前的位置。$
匹配字符串中第一个newline
之前的位置。因此,String
之前的$
当然不会包含newline
,这就是为什么([A-Za-z ]+\n)$
你的正则表达式失败的原因,([A-Za-z ]+)$\n
成功了。
简单来说,$
之后应该跟newline
,而不是其他字符。
答案 1 :(得分:11)
如果模式以换行符结尾,则$
通常在该字符之前匹配。这至少对于Perl,PCRE,Java和.NET来说是如此。 (编辑:正如Tim Pietzker在评论中指出的那样,\r
不被认为是.NET的换行符)
这是引入的,因为从一行读取的输入以换行符终止(至少在Perl中),这可以通过这种方式方便地忽略。
使用\z
表示字符串的非常结尾(如果你的正则表达式引擎支持它)。