根据关于regexes的Perl文档
默认情况下,"^“字符保证只匹配字符串的开头.嵌入的换行符不会被"^“匹配.但是,您可能希望将字符串视为多行缓冲区,这样"^“将在字符串中的任何换行符之后匹配.您可以通过在模式匹配操作符上使用/m修饰符来做到这一点。
“任何换行符之后”部分意味着它只能在第2行和后续行的开头匹配。如果我想在的开头匹配任何行(1,2,等等),该怎么办?
编辑: OK,文件一开始就有BOM信息(3个字符),这就是我搞砸的原因。有办法让^匹配吗?
编辑:所以最终它可以工作(只要没有BOM),但是现在看来Perl文档是错误的,因为它说“在任何换行符之后”
发布于 2010-03-12 20:02:23
如果您想要保留BOM,可以在行的开头使用/^(?:\xEF\xBB\xBF)?/mg正则表达式进行匹配。
发布于 2010-03-12 19:44:42
^确实将第一行与/m标志匹配:
~:1932$ perl -e '$a="12\n23\n34";$a=~s/^/:/gm;print $a'
:12
:23
:34要与BOM匹配,您需要将其包含在比赛中。
~:1939$ perl -e '$a="12\n23\n34";$a=~s/^(\d)/<\1>:/mg;print $a'
12
<2>:3
<3>:4
~:1940$ perl -e '$a="12\n23\n34";$a=~s/^(?:)?(\d)/<\1>:/mg;print $a'
<1>:2
<2>:3
<3>:4发布于 2010-03-12 19:45:24
在概念上,假设字符串开始前有一个换行符。因此,/^a/将在字符串的开头找到一个字母'a‘。
https://stackoverflow.com/questions/2435354
复制相似问题