无法获得Perl多行替换权

时间:2018-09-19 07:32:57

标签: regex perl multiline

我无法理解perl中的多行匹配如何工作 我有一个文件要删除以下内容:

@keyword{

@keyword
{

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

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

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

但我认为以下内容也可以

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

,但不是。它没有抓住第二种情况,我不明白为什么?

有什么解释吗?

1 个答案:

答案 0 :(得分:-1)

啊! 知道了 由于使用了perl -p0777,整个文件只有一行, 表达式在整个文件上匹配一次,因此每个语句都完全匹配一个模式。 解决方案是在最后加上“ g”:

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

但是现在另一个。

我首先没有-0777选项 我认为

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

会工作。 但是,它仍然没有抓住第二种情况(两行模式)。 你能解释为什么吗?