Sam*_*Lee 29 regex perl compilation
有没有办法在Perl中预编译正则表达式?我有一个在程序中多次使用它并且它在使用之间没有变化.
Mic*_*man 68
对于文字(静态)正则表达式,没有什么可做的 - perl只会编译一次.
if ($var =~ /foo|bar/) {
# ...
}
Run Code Online (Sandbox Code Playgroud)
对于存储在变量中的正则表达式,您有几个选项.您可以使用qr//运算符来构建正则表达式对象:
my $re = qr/foo|bar/;
if ($var =~ $re) {
# ...
}
Run Code Online (Sandbox Code Playgroud)
如果要在多个位置使用正则表达式或将其传递给子例程,这很方便.
如果正则表达式模式在字符串中,您可以使用/o选项来保证perl永远不会改变:
my $pattern = 'foo|bar';
if ($var =~ /$pattern/o) {
# ...
}
Run Code Online (Sandbox Code Playgroud)
不过,通常最好不要这样做.Perl很聪明,知道变量没有改变,正则表达式不需要重新编译.指定/o可能是一个不成熟的微优化.这也是一个潜在的陷阱.如果变量已经改变使用/o将导致perl无论如何都使用旧的正则表达式.这可能导致难以诊断错误.
tse*_*see 19
简单:检查qr //运算符(在Regexp Quote-Like Operators下的perlop中记录).
my $regex = qr/foo\d/;
$string =~ $regex;
Run Code Online (Sandbox Code Playgroud)