【问题标题】:split one line regex in a multiline regexp in perl在perl的多行正则表达式中拆分一行正则表达式
【发布时间】:2015-07-02 18:58:01
【问题描述】:

我无法将正则表达式拆分为多行。我希望我的正则表达式匹配给定的行:

* Code "l;k""dfsakd;.*[])_lkaDald"

所以我创建了这个有效的正则表达式:

my $firstRegexpr = qr/^\s*\*\s*Code\s+\"(?<Code>((\")*[^\"]+)+)\"/x;

但现在我想像这样将它拆分为多行(并希望它匹配相同的东西!):

my $firstRegexpr = qr/^\s*\*\s*Code\s+\"
(?<Code>((\")*[^\"]+)+)\"/x;

我读到了这个,但我在使用它时遇到了问题:

/
 ^\s*\*\s*Code\s+\"
 (?<Code>((\")*[^\"]+)+)\"
/x

我的最后一个问题是关于删除 perl 正则表达式中的内联变量:

 my $firstRegexpr = qr/^\s*\*\s*Code\s+\"(?<Code>((\")*[^\"$]+)+)\"\$/x;

字符$]在正则表达式中作为变量匹配,如何定义不作为变量?

非常感谢您抽出宝贵时间,请提供明确的示例。

【问题讨论】:

    标签: regex perl inline multiline


    【解决方案1】:

    x 标志的作用非常简单,就是说“忽略空格”。

    因此您不再匹配“空格”字符,而是<em>有</em>使用\s 或类似字符。

    所以你可以写:

    if ( m/
            ^
            \d+\s+
            fish:\w+\s+
            $ 
          /x ) {
        print "Matched\n";
    }
    

    您可以使用各种网站测试正则表达式,但其中一个示例是 https://regex101.com/

    举个例子:https://regex101.com/r/eG5jY8/1

    但是你的怎么不工作?

    这匹配:

    my $string = q{* Code "l;k""dfsakd;.*[])_lkaDald"};
    
    my $firstRegexpr = qr/^\s*
                            \*
                           \s*
                           Code\s+
                           \"
                           (?<Code>((\")*[^\"]+)+)
                           \"
                        /x;
    
    print "Compiled_Regex: $firstRegexpr\n";
    print "Matched\n" if ( $string =~ m/$firstRegexpr/ );
    

    至于没有$] - 有两个答案。要么:使用\ 转义它,或者使用\Q\E

    【讨论】:

    • 你还能用 \Q\E 和当前的正则表达式给我一个例子吗 my $firstRegexpr = qr/^\s*\*\s*Code\s+\"(?( (\")*[^\"$]+)+)\"\$/x; ,它对我不起作用。非常感谢您的帮助
    • \Q$\E]我觉得应该这样做?
    • 非常感谢,我试图这样做:\Q$]\E,但这不起作用。使用你的方式: \Q$\E] 它工作。 :)
    • 如果你把它放在\E 中,那么它会“转义”它并停止将其视为右括号。
    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多