perr中qr //的含义是什么?

ban*_*sal 10 regex perl

我是perl的新手,并试图设计一个我遇到过的词法分析器:

my @token_def =
 (
        [Whitespace => qr{\s+},     1],
        [Comment    => qr{#.*\n?$}m,   1],
  );
Run Code Online (Sandbox Code Playgroud)

甚至在经过多个网站后,我都不理解其含义.

ser*_*sat 12

qr// 是适用于模式匹配和相关活动的类似报价的运算符之一.

来自perldoc:

此运算符引用(并可能编译)其STRING作为正则表达式.STRING的插值方式与m/PATTERN /中的PATTERN相同.如果'用作分隔符,则不进行插值.

来自modern_perl:

qr //运算符创建了一流的正则表达式.将它们插入匹配运算符以使用它们:

my $hat = qr/hat/;
say 'Found a hat!' if $name =~ /$hat/;
Run Code Online (Sandbox Code Playgroud)

...或将多个正则表达式对象组合成复杂的模式:

my $hat   = qr/hat/;
my $field = qr/field/;

say 'Found a hat in a field!'
if $name =~ /$hat$field/;

like( $name, qr/$hat$field/,
            'Found a hat in a field!' );
Run Code Online (Sandbox Code Playgroud)

  • @Lou - `qr` 在运行之前有效地编译正则表达式,而 `m` 则动态“编译”它。 (2认同)

ike*_*ami 5

qr//在“Regexp Quote-Like Operators”部分的perlop中进行了记录。

就像qq"..."aka"..."允许你构造一个字符串,qr/.../允许你构造一个正则表达式。

$s = "abc";     # Creates a string and assigns it to $s
$s = qq"abc";   # Same as above. 
print("$s\n");

$re = qr/abc/;   # Creates a compiled regex pattern and assigns it to $x
print "match\n" if $s =~ /$re/;
Run Code Online (Sandbox Code Playgroud)

的引用规则qr/.../qq"..."'s非常相似。唯一的区别是\后跟一个非单词字符被原封不动地传递。