2010-08-25 179 views
1

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

运行:

$var =~s /(\d)_/$10/g;
显然不为$ 10个工作被解释为......好$ 10不“$ 1后跟0”

而且,作为乳宁perl5.8,我不能这样做

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

有什么想法吗?
由于事先

回答

11

就像在各种Unix shell中,可以在括号中为消除歧义围住变量名。

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

或者你可以使用一个向后看,以防止位被比赛的一部分:

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

这就是它。非常感谢 ! – benzebuth 2010-08-25 13:29:36

0

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

+0

这显然违背了OP的意图。 – jpalecek 2010-08-25 13:29:48

+0

对不起,但我说我需要替换下划线,这意味着我保留数字 – benzebuth 2010-08-25 13:31:01

0

另一种可能性是(不知道是否适用于perl的5.8.8)

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

这也将是一个零宽度向后看断言的好去处:

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

它寻找一个数字,但实际上并没有将数字sl到匹配的文本中。

+0

这也适用。谢谢。 – benzebuth 2010-08-25 13:34:18