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

时间:2015-05-07 06:16:24

标签: regex perl

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

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

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

2 个答案:

答案 0 :(得分:11)

qr//是适用于模式匹配和相关活动的类似引号的运算符之一。

来自perldoc

  

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

来自modern_perl

  

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

my $hat = qr/hat/;
say 'Found a hat!' if $name =~ /$hat/;

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

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!' );

答案 1 :(得分:4)

qr//记录在“正则表达式运算符”部分的perlop中。

就像qq"..."又名"..."允许你构造一个字符串一样,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/;

qr/.../的引用规则与qq"..."非常相似。唯一的区别是\后面跟着一个非单词字符会保持不变。

相关问题