Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式中的美元符号和新行字符 我知道美元符号用于匹配字符串结尾的字符,以确保搜索不会在字符串中间停止,而是继续到字符串的结尾。_Regex - Fatal编程技术网

Regex 正则表达式中的美元符号和新行字符 我知道美元符号用于匹配字符串结尾的字符,以确保搜索不会在字符串中间停止,而是继续到字符串的结尾。

Regex 正则表达式中的美元符号和新行字符 我知道美元符号用于匹配字符串结尾的字符,以确保搜索不会在字符串中间停止,而是继续到字符串的结尾。,regex,Regex,但是它是如何处理换行符的,是在换行符之前匹配还是考虑到了这一点 我在EclipseRegex中检查了它,查找与字符串数组匹配的regex ([A-Za-z]+)$\n有效,而不是相反的([A-Za-z]+\n)$如果模式以换行符结尾,则$通常在该字符之前匹配。这至少适用于Perl、PCRE、Java和.NET。(编辑:正如Tim Pietzker在评论中指出的,\r不被视为.NET的换行符) 这是因为从一行读取的输入以换行符终止(至少在Perl中是这样),这样可以方便地忽略换行符 使用\z表示字

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

我在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
成功的原因


简单地说,您的
$
后面应该跟一个
换行符
,而不是其他字符。

请注意,在.NET中,
\r
不被视为换行符。请查看全面的解释。好的,是否将换行符视为字符串结尾取决于正则表达式的风格和匹配选项。但这取决于引擎。这对于普通引擎来说是正确的,但是我已经看到了一些小的正则表达式实现,它们在使用
$
@tripleee时实际上“吃掉”了换行符。。啊!!不过我到现在还没有经历过那个恶魔。谢谢你的评论,如果你能举个例子,这会更有用。在我的脑海中,我可以指向Procmail,但我记得在很多地方都看到过。在Procmail中,
$
是一种文档,用于匹配文字换行符,因此您可以说
$
来匹配空行。