除非引用,否则删除行尾注释

时间:2012-10-05 01:23:05

标签: regex perl comments

我需要一个Perl正则表达式来删除行尾注释。我觉得我已经用谷歌搜索过了,找不到合适的东西。以下是详细信息:

使用井号(#)

表示EOL评论

可以使用竖线(|)

引用任何内容

以下是评论:

foo bar #baz

但以下情况并非如此:

foo |quoted###with bars|

以下是评论和引文,其中包含评论字符:

foo |quoted###with bars| #comment here

我尝试的第一件事是s/#(?=[^|]*$).*$//,不幸的是,它删除了引用的磅数。接下来不起作用的是/#(?=[^|]*$).*$//,因为它在多行引号上失败,如下所示:

foo |quote begins here ##still going
        ##and it's still going| #this is a quote, though.

我觉得我可以在perlfaq6中收集正则表达式中用于C / C ++注释的内容,但这对我来说太复杂了,只抓住我需要的东西(不需要多行注释;)。

任何人都可以提供正则表达式来删除EOL注释但忽略引用的注释字符吗?

1 个答案:

答案 0 :(得分:3)

一种方法:

  

s/(\|[^|]*\|)|#.*/$1||''/eg

这会将|...|(包括|...#...|)替换为自身,而将#...替换为任何内容。