美元符号正则表达式和新的线字符

时间:2012-12-17 10:30:27

标签: regex

我知道美元符号用于匹配字符串末尾的字符,以确保搜索不会停留在字符串的中间,而是继续直到字符串的结尾。

但是它如何处理换行符,它是否恰好在新行字符之前匹配,还是将其考虑在内。

我在eclipse正则表达式中检查了它,以获得匹配字符串数组的正则表达式 ([A-Za-z ]+)$\n工作,而不是相反([A-Za-z ]+\n)$

2 个答案:

答案 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表示字符串的非常结尾(如果你的正则表达式引擎支持它)。

Source