我需要一个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注释但忽略引用的注释字符吗?
答案 0 :(得分:3)
一种方法:
s/(\|[^|]*\|)|#.*/$1||''/eg
这会将|...|
(包括|...#...|
)替换为自身,而将#...
替换为任何内容。