在应用s///
运算符后,有什么方法可以找出替代(“旧”文本)的内容吗?我试过了:如何找出在Perl替换中被替换的内容?
if (s/(\w+)/new/) {
my $oldTxt = $1;
# ...
}
但这并不奏效。 $1
未定义。
在应用s///
运算符后,有什么方法可以找出替代(“旧”文本)的内容吗?我试过了:如何找出在Perl替换中被替换的内容?
if (s/(\w+)/new/) {
my $oldTxt = $1;
# ...
}
但这并不奏效。 $1
未定义。
您应该能够使用Perl匹配变量:
$&
包含由过去的模式匹配匹配的字符串
$&
你想要做什么,但看到健康警示在perlvar
在程序中任何地方使用这个变量的规定相当大的性能损失,在所有正则表达式匹配。
如果你可以找到一种方法来做到这一点,而不使用$&
,尝试。如果您使用5.10或更高版本,您不必使用潜在的,性能比较查杀$&
my ($match) = /(\w+)/;
if (s/(\w+)/new/) {
my $oldTxt = $match;
# ...
}
:你可以运行两次正则表达式。从/p
标志的${^MATCH}
变量做同样的事,但只与指定的正则表达式:
use 5.010;
if(s/abc(\w+)123/new/p) {
say "I replaced ${^MATCH}"
}
像往常一样,向我们展示与说明问题违规输入一个完整的,最小的方案。错误可能在其他地方。 – 2010-02-25 23:29:19
它必须在别的地方,因为他发布的代码工作得很好。 – cjm 2010-02-26 02:19:42