多行模式下字符串开头和结尾的正则表达式

Ale*_*ukh 4 regex perl pcre

在正则表达式,在多行模式,^并且$代表开始和线路的端部。如何匹配整个字符串的结尾?

在字符串中

Hello\nMary\nSmith\nHello\nJim\nDow
Run Code Online (Sandbox Code Playgroud)

表达方式

/^Hello(?:$).+?(?:$).+?$/ms
Run Code Online (Sandbox Code Playgroud)

火柴Hello\nMary\Smith

我想知道是否有一个元字符(如\ENDSTRING)与整个字符串的末尾匹配,而不仅仅是行,因此

/^Hello(?:$).+?(?:$).+?\ENDSTRING/ms
Run Code Online (Sandbox Code Playgroud)

将匹配Hello\nJim\nDow。同样,一个元字符可以匹配整个字符串的开头,而不是一行。

zdi*_*dim 5

确实有断言(perlre)

\A 仅在字符串开头匹配,仅在字符串结尾
\Z 匹配,或在换行符之前匹配

......
\A\Z就像^并且$,除了当他们将不会匹配多次/m使用改良剂,而^$将匹配在每个内部行的边界。要匹配字符串的实际结尾并且不忽略可选的尾随换行符,请使用\z

另请参见perlbackslash中的断言

我不确定您在此示例中所追求的是什么,所以这是另一个

perl -wE'$_ = qq(one\ntwo\nthree); say for /(\w+\n\w+)\Z/m'
Run Code Online (Sandbox Code Playgroud)

版画

二
三

而with则$代替\Z打印行onetwo


请注意,上面的示例也将匹配qq(one\ntwo\three\n)(使用尾随换行符),可能合适也可能不合适。请比较\Z,并\z从您的实际需要,上述报价。感谢ikegami的评论。