在一个源代码中,我找到了此正则表达式:
my $var = qr!$my_string!;
我根本不知道这匹配什么。我也在网上搜索,对qr的解释很简单。
有人可以用人类语言来解释吗? :)
答案 0 :(得分:9)
大多数quote-like operators几乎可以接受任何分隔符。† qr也不例外,这里使用 public function handle($request, Closure $next,$htmlString)
{
$replace = [
'<!--(.*?)-->' => '', //remove comments
"/<\?php/" => '<?php ',
"/\n([\S])/" => '$1',
"/\r/" => '', // remove carriage return
"/\n/" => '', // remove new lines
"/\t/" => '', // remove tab
"/\s+/" => ' ', // remove spaces
];
return preg_replace(array_keys($this->replace), array_values($this->replace), $htmlString);
}
作为分隔符。它还评估(“内插”)引用的变量。因此,该行代码使用!
变量中的内容构建了正则表达式模式。此模式可能稍后在正则表达式中的代码中使用。这是正常使用。
完整的示例:
$my_string
use warnings;
use strict;
use feature 'say';
my $str = q(hey);
my $re = qr!$str!;
my $tgt = q(A_hey_C);
$tgt =~ s/$re/B/;
say $tgt; #--> A_B_C
的目的是专门构造一个正则表达式模式,因此可以期望上面的qr
(问题中的$str
)或$my_string
中的模式,可能包含正则表达式特定的模式,也可能包含程序中汇编的其他变量。上面的qr
仅带有纯字符串,可以很好地在正则表达式中直接使用,因此这不是一个实际的示例。
†请参阅 What are the legal delimiters for Perl 5's pick-your-own-quotes operators?