【发布时间】:2018-09-19 07:32:56
【问题描述】:
我无法理解 perl 中的多行匹配是如何工作的 我有一个文件,我想删除以下内容:
@keyword{
或
@keyword
{
在这两种情况下,@ 都是该行的第一个字符。
我可以使用两条单独的指令(使用“perl -p0777”):
s/\n\@keyword\{//
s/\n\@keyword\n\{//
但我认为以下内容也可以使用
s/\n\@keyword\n?\{//
但事实并非如此。它没有抓住第二种情况,我不明白为什么???
有什么解释吗?
【问题讨论】:
-
与您的说法相反,
s/\n\@keyword\n?\{//有效,如果s/\n\@keyword\n\{//有效。 -
当两个模式中的任何一个多次出现,并且 perl 被赋予 -0777 参数时,它只适用于每个模式的第一个实例。原因很明显(一旦理解了问题),我在“答案”中给出了它。但是不,如果没有 perl 指令末尾的“g”,它就无法工作。
-
当两种模式中的任何一种多次出现时,两个版本都只做第一个,所以我的评论成立。