【问题标题】:Perl's regular expression modifierPerl 的正则表达式修饰符
【发布时间】:2011-07-19 16:34:13
【问题描述】:

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

/o

例如,

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

/o 是什么意思?

【问题讨论】:

  • 查看here 了解更多关于/o 修饰符的讨论。

标签: regex perl


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    (source)

    【讨论】:

      【解决方案3】:

      绝对没有!

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

      如果有插值,/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
      

      【讨论】:

      • 即使有插值,它也几乎什么都不做!即使它确实做某事,您也可能不希望它这样做!所以使用 /o 没有什么意义。
      • @hobbs,我完全同意。使用 qr// 会好很多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      相关资源
      最近更新 更多