2

我需要一个 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 评论但忽略引用的评论字符的正则表达式吗?

4

1 回答 1

3

一种方法:

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

这将|...|(包括|...#...|)替换为自身,并且#...什么都没有。

于 2012-10-05T01:30:32.173 回答