Perl的正则表达式修饰符

时间:2011-07-19 16:34:14

标签: regex perl

以下Perl正则表达式修饰符有什么作用?

/o

例如,

$string =~ /foo\(\"([^\)]*)\"\)/o)   

/o是什么意思?

3 个答案:

答案 0 :(得分:6)

它告诉Perl只编译一次表达式。请参阅 What is /o really for?

答案 1 :(得分:5)

  

正则表达式的/ o选项(在perlop和perlreref中记录)告诉Perl只编译一次正则表达式。这仅在模式包含变量时才有用。如果模式没有改变,Perls 5.6及更高版本会自动处理它。

source

答案 2 :(得分:5)

绝对没有!

它会影响插值,并且没有任何内容插入到该模式中。

如果有内插的话,/ o会导致插值只发生一次,无论执行匹配运算符多少次。

>perl -E"for (['o','foo'],['a','bar'],['e','neo']) {
    my ($pat, $s) = @$_; say $s =~ /$pat/ ? $& : 0 }"
o
a
e

>perl -E"for (['o','foo'],['a','bar'],['e','neo']) {
    my ($pat, $s) = @$_; say $s =~ /$pat/o ? $& : 0 }"
o
0
o