替换正则表达式,捕获

时间:2010-08-25 13:19:52

标签: regex perl

也许这是一个愚蠢的问题但是:
我运行perl 5.8.8,我需要替换任何前面带有数字的下划线,用“0”。

正在运行:

 $var =~s /(\d)_/$10/g; 
显然不起作用,因为10美元被解释为......好吧...... 10美元,而不是“1美元后跟0”

此外,作为运行perl5.8,我无法做到

$var=~s/(?<n1>\d)\_/$+{n1}0/g;

任何想法?
提前谢谢

4 个答案:

答案 0 :(得分:11)

就像在各种Unix shell中一样,您可以将变量名称括在大括号中以便消除歧义。

$var =~s /(\d)_/${1}0/g;

或者您可以使用后视防止数字成为匹配的一部分:

$var =~s /(?<=\d)_/0/g; 

答案 1 :(得分:2)

这也是零宽度后视断言的好地方:

$var =~ s/(?<=\d)_/0/g;

它会查找一个数字,而不会将数字实际压入匹配的文本中。

答案 2 :(得分:0)

$var =~s/(\d)_/${1}0/g;

答案 3 :(得分:0)

另一种可能性(不确定是否适用于perl 5.8.8)

s/\d\K_/0/
s/(?<=\d)_/0/