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

Regex Perl正则表达式:如何组合这两个正则表达式语句?,regex,perl,selector,Regex,Perl,Selector,我正在尝试编写一个选择器,它过滤/删除注释(#)符号后的所有内容,但忽略字符串(“”或“”)中的#符号 因此,在下面的示例中,仅过滤/删除最后一行 "#dummy comment" asd asd ' abc # dummy comment' abc #real comment 以下是我迄今为止提出的两个正则表达式选择器(稍后我将添加s/标记): 我目前正努力加入这两条评论,以实现上述结果。我试过使用正向和反向查找,但似乎无法正确使用。任何建议都将不胜感激 这个简单的方法怎么样 首先删除双引号

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

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

"#dummy comment" asd asd
' abc # dummy comment'
abc #real comment
以下是我迄今为止提出的两个正则表达式选择器(稍后我将添加s/标记):


我目前正努力加入这两条评论,以实现上述结果。我试过使用正向和反向查找,但似乎无法正确使用。任何建议都将不胜感激

这个简单的方法怎么样

  • 首先删除双引号或单引号之间的所有子字符串
  • 通过一个简单的正则表达式cpature提取出
    #
    后面的子字符串
  • 以下是用于示例输入的测试程序:

    #!/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
    
    #/usr/bin/perl
    严格使用;
    使用警告;
    而(){
    咀嚼;
    s/['“][^']*['”]//g;
    如果(m/#(.*)/){
    打印“$1\n”;
    }
    }
    __资料__
    “虚拟评论”asd asd
    “abc#虚假评论”
    abc#真实评论
    
    如果你希望编写一个程序,可以从Perl代码中删除注释,那么我认为你是在浪费时间。你必须考虑诸如“代码> $String=Sy/s//y/g/g,<代码> >代码> >我的$i(0…$数组){}…
    ,可能还有其他几个。如果您希望编写一个程序来删除Perl代码中的注释,那么该程序已经编写好了。请使用。不确定为什么它被搁置,问题主要是加入两个语句,而不仅仅是删除注释。很抱歉,听起来像个noob,但是如果我已经将数据存储在s中单变量/string$str而不是数据文件,那么我该如何使用上面的while循环。我自己尝试过,但得到了一个无限循环。谢谢:D@SimpsonDanny然后,您可以在执行循环时删除该
    ,使用类似
    $str=~s/['''“[^']*[''”]//g;如果$str=~m/#(.*)/,则打印“$1\n”#!/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