22

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

但是它如何处理换行符,它是在换行符之前匹配还是考虑到这一点。

我在 Eclipse 正则表达式中检查了它,因为正则表达式匹配的字符串数组 ([A-Za-z ]+)$\n有效,而不是相反([A-Za-z ]+\n)$

4

2 回答 2

27

请注意^$zero-width令牌。因此,它们不匹配任何字符,而是匹配position.

  • ^匹配字符串中第一个字符之前的位置。
  • $匹配newline字符串中第一个之前的位置。

所以,String之前的$当然不包括newline,这就是([A-Za-z ]+\n)$你的正则表达式失败并([A-Za-z ]+)$\n成功的原因。

简单来说,你的$后面应该跟一个newline,而不是其他字符。

于 2012-12-17T10:46:06.523 回答
12

如果模式以换行符结尾,则$通常在该字符之前匹配。至少对于 Perl、PCRE、Java 和 .NET 来说是这样。(编辑:正如 Tim Pietzker 在评论中指出的那样,\r.NET 不认为换行符)

这是引入的,因为从一行读取的输入以换行符终止(至少在 Perl 中),这样可以方便地忽略它。

用于\z表示字符串的最后(如果您的正则表达式引擎支持它)。

资源

于 2012-12-17T10:40:17.970 回答