我知道美元符号用于匹配字符串末尾的字符,以确保搜索不会在字符串中间停止,而是一直持续到字符串末尾。
但是它如何处理换行符,它是在换行符之前匹配还是考虑到这一点。
我在 Eclipse 正则表达式中检查了它,因为正则表达式匹配的字符串数组
([A-Za-z ]+)$\n
有效,而不是相反([A-Za-z ]+\n)$
我知道美元符号用于匹配字符串末尾的字符,以确保搜索不会在字符串中间停止,而是一直持续到字符串末尾。
但是它如何处理换行符,它是在换行符之前匹配还是考虑到这一点。
我在 Eclipse 正则表达式中检查了它,因为正则表达式匹配的字符串数组
([A-Za-z ]+)$\n
有效,而不是相反([A-Za-z ]+\n)$
请注意^
和$
是zero-width
令牌。因此,它们不匹配任何字符,而是匹配position
.
^
匹配字符串中第一个字符之前的位置。$
匹配newline
字符串中第一个之前的位置。所以,String
之前的$
当然不包括newline
,这就是([A-Za-z ]+\n)$
你的正则表达式失败并([A-Za-z ]+)$\n
成功的原因。
简单来说,你的$
后面应该跟一个newline
,而不是其他字符。
如果模式以换行符结尾,则$
通常在该字符之前匹配。至少对于 Perl、PCRE、Java 和 .NET 来说是这样。(编辑:正如 Tim Pietzker 在评论中指出的那样,\r
.NET 不认为换行符)
这是引入的,因为从一行读取的输入以换行符终止(至少在 Perl 中),这样可以方便地忽略它。
用于\z
表示字符串的最后(如果您的正则表达式引擎支持它)。