无法获得perl多行替换权

问题描述 投票:-3回答:1

我无法理解多线匹配如何在perl中工作我有一个文件,我想删除任何外观:

@keyword{

要么

@keyword
{

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

我可以用两个单独的指令(使用'perl -p0777')来完成它:

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

但我认为以下内容也会奏效

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

它没有。它没有赶上第二种情况,我不明白为什么???

任何解释?

regex perl multiline
1个回答
-1
投票

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

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

但现在又是另一个。

我刚开始没有-0777选项,我想到了

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

会工作。但它再次没有赶上第二种情况(两行模式)。你能解释一下原因吗?

© www.soinside.com 2019 - 2024. All rights reserved.