在perl

时间:2015-07-02 18:58:02

标签: regex perl inline multiline

我无法在多行中分割我的正则表达式。我希望我的正则表达式匹配给定的行:

* 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 regex中删除内联变量:

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

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

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

1 个答案:

答案 0 :(得分:0)

x标志的作用非常简单地说'忽略空格'。

因此,您不再匹配'空格'字符,而是 使用\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