首页 新闻 会员 周边 捐助

perl的多行模式m,为什么我不加也能搜到

0
[已解决问题] 解决于 2025-07-25 15:03

perl的多行模式m,为什么我不加也能搜到

不加m, \n这些转义序列都会转化控制字符,这个“afaf\nafafa” 整个字符串匹配,\n也是字符其中一员

_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-07-25 15:01
< >
分享
最佳答案
0

在 Perl 里,/.../m 只影响两个锚点:
^ 和 $
不加 m 时:
– ^ 只能匹配 整个字符串的开头
– $ 只能匹配 整个字符串的结尾
加了 m 后:
– ^ 可以匹配 每一行的开头(即每个 \n 之后的位置)
– $ 可以匹配 每一行的结尾(即每个 \n 之前的位置)
如果你的模式里 没有用到 ^ 或 $,那么 m 对你毫无影响,自然“加不加都能搜到”

my $txt = "abc\ndef\nghi";

没有 ^ 或 $ —— 加不加 m 结果一样

$txt =~ /def/; # 总能匹配成功
$txt =~ /def/m; # 同样成功

含有 ^ 或 $ —— 差异立刻出现

$txt =~ /^def/; # ❌ 失败(整个串开头不是 def)
$txt =~ /^def/m; # ✅ 成功(第二行开头是 def)
结论
只有当模式里出现 ^ 或 $ 时,/m 才会起作用;否则加不加都无所谓。

_java_python | 小虾三级 |园豆:984 | 2025-07-25 15:01

不管加没加m,单行或多行,\n字符是一直存在的,只不过多行会从\n出算另一行开头,但整体上\n一直存在,不是丢失什么的

_java_python | 园豆:984 (小虾三级) | 2025-08-01 17:42
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册