在perl中的多行正则表达式中拆分一行正则表达式

split one line regex in a multiline regexp in perl

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

* 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;

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

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

x 标志的作用非常简单地说 'ignore whitespace'。

因此您不再匹配 'space' 个字符 </code>,而是 <em> 有 </em> 使用 <code>\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