【问题标题】:How to use the /r flag in Perl regex?如何在 Perl 正则表达式中使用 /r 标志?
【发布时间】:2012-09-14 16:54:21
【问题描述】:

Perl 文档指出:

e  Evaluate 'replacement' as an expression
r  Return substitution and leave the original string untouched.

是可用于替换模式的标志。当我将 r 标志传递给我的替换模式时,它被解释为语法错误。我正在运行 Perl 5.8.8。我的 Perl 版本是否可能不支持它?另外,有人可以提供一个如何使用标志以及如何调用新创建的替换的工作示例吗?

【问题讨论】:

标签: regex perl


【解决方案1】:

那么,也许您应该阅读 5.8.8 的文档? /r 已添加到 5.14!

在 5.8.8 中,您可以执行相当于

s/foo/bar/r

do { (my $s = $_ ) =~ s/foo/bar/; $s }

s///r 的示例用法:

print "abba" =~ s/b/!/rg;         # Prints a!!a

my $new = $old =~ s/this/that/r;  # Leaves $old intact.

my $trimmed = $val =~ s/^\s+//r =~ s/\s+\z//r;
my $trimmed = (($val =~ s/^\s+//r) =~ s/\s+\z//r);  # Same as previous

【讨论】:

  • 你能展示如何在 5.14 中调用它吗?我对它如何返回不同的变量感到困惑,但您仍然必须注明变量才能运行它。例如:$var =~ s/this/that/r;新变量保存在哪里?
  • @user1671989,它被退回。 «print "abc" =~ s/b/!/rg;» 打印 «a!c»。
  • 因此,如果它被返回并且我将其称为 $var =~ s/this/that/r;它确实会覆盖$var?如何在 $var 上运行它并将其返回给 $new_var?抱歉,我是个菜鸟,无法理解它。
  • my $new_var = ($var =~ s/this/that/r;); 那样?另外,不相关,我如何在 SO 注释中标记代码?
  • 是的,你可以这样做。这将使$var 保持不变,并将新值放在$new_var 中。 /// 用反引号括起来,或者缩进 4 个空格。 (Ctrl-K 会为你缩进一大段代码。)
猜你喜欢
  • 2015-02-16
  • 1970-01-01
  • 2019-01-12
  • 1970-01-01
  • 2022-11-02
  • 2018-07-17
  • 2023-01-23
  • 1970-01-01
  • 2012-04-07
相关资源
最近更新 更多