如何找出Perl替换中被替换的内容?

Joe*_*Fan -4 regex perl

在应用s///运算符后,有没有办法找出替换("旧"文本)的内容?我试过做:

if (s/(\w+)/new/) {
    my $oldTxt = $1;
    # ...
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.$1未定义.

Sea*_*ean 7

你的代码适合我.从真实的终端窗口复制并粘贴:

$ perl -le '$_ = "*X*"; if (s/(\w+)/new/) { print $1 }'
X
Run Code Online (Sandbox Code Playgroud)

你的问题必须是别的.

  • 也许他的表达不匹配,然后没有替换发生,并且没有设置$ 1. (2认同)
  • 如果它不匹配那么它甚至不会进入"如果"的主体 (2认同)

bri*_*foy 6

如果您使用的是5.10或更高版本,则不必使用潜在的性能消除$&.${^MATCH}来自/p标志的变量执行相同的操作,但仅适用于指定的正则表达式:

 use 5.010;

 if( s/abc(\w+)123/new/p ) {
      say "I replaced ${^MATCH}"
      }
Run Code Online (Sandbox Code Playgroud)