Perl正则表达式:我如何组合这两个正则表达式语句?

时间:2014-04-23 12:46:27

标签: regex perl selector

我正在尝试编写一个选择器,它在注释(#)符号后过滤掉/删除所有内容,但忽略字符串中的#符号(“”或“)

因此,在下面的示例中,只会过滤/​​删除最后一行

"#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 ) 

我目前正在努力加入这两条评论来实现上述结果。我试过使用正向和反向查找,但似乎无法做到这一点。任何建议都将非常感激。

1 个答案:

答案 0 :(得分:2)

这个简单的方法怎么样?

  1. 首先删除双引号或单引号之间的所有子字符串
  2. 通过简单的正则表达式cpature
  3. #之后提取子字符串

    以下是您的样本输入的测试程序:

    #!/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