【发布时间】:2011-07-19 16:34:13
【问题描述】:
下面的 Perl 正则表达式修饰符有什么作用?
/o
例如,
$string =~ /foo\(\"([^\)]*)\"\)/o)
/o 是什么意思?
【问题讨论】:
-
查看here 了解更多关于
/o修饰符的讨论。
下面的 Perl 正则表达式修饰符有什么作用?
/o
例如,
$string =~ /foo\(\"([^\)]*)\"\)/o)
/o 是什么意思?
【问题讨论】:
/o 修饰符的讨论。
它告诉 Perl 只编译一次表达式。请参阅What is /o really for?。
【讨论】:
正则表达式的 /o 选项(记录在 perlop 和 perlreref 中)告诉 Perl 只编译正则表达式一次。这仅在模式包含变量时有用。如果模式没有改变,Perls 5.6 和更高版本会自动处理这个问题。
(source)
【讨论】:
绝对没有!
它会影响插值,并且没有任何内容被插值到该模式中。
如果有插值,/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
【讨论】: