首页 > 解决方案 > 无法正确获取 perl 多行替换

问题描述

我无法理解多行匹配在 perl 中的工作原理我有一个文件,我想在其中删除以下任何外观:

@keyword{

或者

@keyword
{

在这两种情况下,@ 都是该行的第一个字符。

我可以用两条单独的指令(使用'perl -p0777')来做到这一点:

s/\n\@keyword\{//
s/\n\@keyword\n\{//

但我认为以下内容也可以

s/\n\@keyword\n?\{//

但事实并非如此。它没有抓住第二种情况,我不明白为什么???

有什么解释吗?

标签: regexperlmultiline

解决方案


啊啊啊!刚刚得到它。因为 perl -p0777,整个文件只有一行,表达式在整个文件上匹配一次,所以每个语句只匹配一个模式。解决方案是将'g'放在最后:

s/\n\@keyword\n?\{//g

但现在又一个。

我一开始没有 -0777 选项,我认为

s/^\@keyword\n?\{//m

会工作。但它再次没有捕捉到第二种情况(两行模式)。你能解释一下为什么吗?


推荐阅读