首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在任何行的开头(包括第一行)与Perl regex匹配?

如何在任何行的开头(包括第一行)与Perl regex匹配?
EN

Stack Overflow用户
提问于 2010-03-12 19:42:11
回答 4查看 1.6K关注 0票数 5

根据关于regexes的Perl文档

默认情况下,"^“字符保证只匹配字符串的开头.嵌入的换行符不会被"^“匹配.但是,您可能希望将字符串视为多行缓冲区,这样"^“将在字符串中的任何换行符之后匹配.您可以通过在模式匹配操作符上使用/m修饰符来做到这一点。

“任何换行符之后”部分意味着它只能在第2行和后续行的开头匹配。如果我想在的开头匹配任何行(1,2,等等),该怎么办?

编辑: OK,文件一开始就有BOM信息(3个字符),这就是我搞砸的原因。有办法让^匹配吗?

编辑:所以最终它可以工作(只要没有BOM),但是现在看来Perl文档是错误的,因为它说“在任何换行符之后”

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-12 20:02:23

如果您想要保留BOM,可以在行的开头使用/^(?:\xEF\xBB\xBF)?/mg正则表达式进行匹配。

票数 3
EN

Stack Overflow用户

发布于 2010-03-12 19:44:42

^确实将第一行与/m标志匹配:

代码语言:javascript
复制
~:1932$ perl -e '$a="12\n23\n34";$a=~s/^/:/gm;print $a'
:12
:23
:34

要与BOM匹配,您需要将其包含在比赛中。

代码语言:javascript
复制
~: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
票数 4
EN

Stack Overflow用户

发布于 2010-03-12 19:45:24

在概念上,假设字符串开始前有一个换行符。因此,/^a/将在字符串的开头找到一个字母'a‘。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2435354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档