也许这是一个愚蠢的问题但是:
我运行perl 5.8.8,我需要替换任何前面带有数字的下划线,用“0”。
正在运行:
$var =~s /(\d)_/$10/g;
显然不起作用,因为10美元被解释为......好吧...... 10美元,而不是“1美元后跟0”
此外,作为运行perl5.8,我无法做到
$var=~s/(?<n1>\d)\_/$+{n1}0/g;
任何想法?
提前谢谢
答案 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/