我正在尝试编写一个选择器,它在注释(#)符号后过滤掉/删除所有内容,但忽略字符串中的#符号(“”或“)
因此,在下面的示例中,只会过滤/删除最后一行
"#dummy comment" asd asd
' abc # dummy comment'
abc #real comment
这是我到目前为止提出的两个正则表达式选择器(稍后我将添加s /标签):
/('|").*#.*('|")/g --> selects fake commnts
/#(?!!).+/g ---> highlights all comments, including above ones (?!! is to ignore #!/usr/bin/env perl )
我目前正在努力加入这两条评论来实现上述结果。我试过使用正向和反向查找,但似乎无法做到这一点。任何建议都将非常感激。
答案 0 :(得分:2)
这个简单的方法怎么样?
#
之后提取子字符串
醇>
以下是您的样本输入的测试程序:
#!/usr/bin/perl
use strict;
use warnings;
while (<DATA>) {
chomp;
s/['"][^'"]*['"]//g;
if (m/#(.*)/) {
print "$1\n";
}
}
__DATA__
"#dummy comment" asd asd
' abc # dummy comment'
abc #real comment