Regex 在Perl中,$有时用来匹配换行符吗?

Regex 在Perl中,$有时用来匹配换行符吗?,regex,perl,Regex,Perl,我似乎记得,在某些条件下,$会匹配换行符,而不仅仅是在以前,但我在文档中找不到任何可以证实这一点的东西。这在早期版本的Perl中是真的还是我在做梦?如果将/s修饰符传递给regexp,则$匹配字符串的结尾并允许。匹配\n 这可能有点混乱。对于一个foo字符串\n,请观察以下各项之间的差异: /.$/匹配“o” /.$/s仍与“o”匹配 /.+$/s匹配“foo\n” /.\z/根本不匹配 /.\z/s匹配的“\n”始终如此。请参见$是一个锚: $Match string end或line,如果使

我似乎记得,在某些条件下,$会匹配换行符,而不仅仅是在以前,但我在文档中找不到任何可以证实这一点的东西。这在早期版本的Perl中是真的还是我在做梦?

如果将/s修饰符传递给regexp,则$匹配字符串的结尾并允许。匹配\n

这可能有点混乱。对于一个foo字符串\n,请观察以下各项之间的差异:

/.$/匹配“o”

/.$/s仍与“o”匹配

/.+$/s匹配“foo\n”

/.\z/根本不匹配


/.\z/s匹配的“\n”

始终如此。请参见$是一个锚:

$Match string end或line,如果使用/m或在换行符之前

如果要匹配字符串的结尾,应使用\z:

\z匹配绝对字符串结束


你混淆了两件非常相似的事情。如果未使用/m,$在字符串末尾匹配,如果使用/m,则在字符串末尾或字符串末尾匹配,但最后换行符除外。但是,它实际上并不匹配换行符本身。您仍然可以将换行符本身与regexp中的其他内容进行匹配,例如\n;或者,如果您也使用/s,那么/blah$./sm理论上会与blah\n匹配,即使$不是正则表达式中的最后一项


这实际上不起作用的原因是两者都是$。和$\实际上被解释为特殊变量,而不是$plus,因此在regexp中,在$之后放置某些内容实际上是相当困难的。令人困惑,不是吗?

添加“m”修饰符“$”将匹配但不使用行尾字符。通常“$”匹配字符串的结尾

产生:

firstEND
secondEND
thirdEND
如果要使用换行符,只需使用转义符:

my $sample = "first\nsecond\nthird";
$sample =~ s/\n/END/g;
print $sample;
现在您可以:

firstENDsecondENDthird

请注意,“m”修饰符也会以与“$”相同的方式影响“^”。

对不起。。。与我的问题无关,除非我误解了什么,否则你的意思不是你认为你的意思不做任何字符匹配,它做位置匹配,所以你可能会问:$是在换行符之前还是之后匹配。我记得一些关于它使用换行符的事情itself@JoelFan=>$是一个零宽度位置断言,它从不使用任何字符SIT/m来更改锚定“^和$”的含义/s仅更改点的含义。$始终在字符串末尾或字符串末尾的换行符之前匹配。在/m模式中,它也在任何其他换行之前匹配。至少,它在Perl中是这样工作的;在这方面,可能有一些Perl派生的风格与Perl不完全一样,但我想不出任何一种。123\n=~/^\d+$/为真。这意味着,如果您的验证代码出错,它将带来各种潜在的乐趣:我想你可以用美元。如果您有/x不完全正确。在字符串末尾或换行符之前,如果没有/m,则在字符串末尾或任何换行符之前。字符串的结尾是\z。要在正则表达式中的任何位置使用$anywhere,如果没有/m,您可以说\z not\z。使用/m,您可以在$dollar变量中插入$,并在需要时将其插入为${dollar}。或执行例如/@{['$']}/
firstENDsecondENDthird