在正则表达式,在多行模式,^并且$代表开始和线路的端部。如何匹配整个字符串的结尾?
在字符串中
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。同样,一个元字符可以匹配整个字符串的开头,而不是一行。
确实有断言(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打印行one和two。
请注意,上面的示例也将匹配qq(one\ntwo\three\n)(使用尾随换行符),可能合适也可能不合适。请比较\Z,并\z从您的实际需要,上述报价。感谢ikegami的评论。