在Perl中的字符串匹配之前替换字符

时间:2013-11-22 04:40:07

标签: regex perl

我想在找到字符串匹配之前替换space / tab /或任何字符。

鉴于此输入:

“1)苹果.2)蓝色笔.3)黑色衬衫.4)红色帽子。”

我想要这个输出:

1)apple._2)blue pen._3)black shirt._4)red hat。

有一个固定的模式,例如数字后跟),之前我想要替换。

代码:

$str = "1)apple. 2)blue pen. 3)black shirt. 4)red hat.";
print "before ==> $str \n";
$str =~ s/.(\d+)/_/g;
print "after ==> $str \n"; # o/p: 1)apple._)blue pen._)black shirt._)red hat.

由于

2 个答案:

答案 0 :(得分:2)

您需要将捕获的匹配$1添加到替换运算符的替换端。

$str =~ s/.(\d+\))/_$1/g;

你也可以在这里使用先行断言。

$str =~ s/.(?=\d+\))/_/g;

如果您的模式有多个数字,例如9)orange. 10)black shirt.,则失败。相反,你可以使用否定的匹配,这将成功。

$str =~ s/[^\d](?=\d+\))/_/g;

答案 1 :(得分:1)

将您的模式s/.(\d+)/_/g更改为s/.(\d+\))/_\1/g。模式中的\1表示您捕获的值

更新

在启用警告后,它表示最好将\1写入$1