在/ s之间的另一个数字前面添加一个数字?

时间:2013-06-14 14:31:51

标签: java regex

我有一堆看起来像这样的字符串

/files/etc/hosts/2/ipaddr
/files/etc/hosts/2/canonical
/files/etc/hosts/2/alias[1]
/files/etc/hosts/3/ipaddr
/files/etc/hosts/3/canonical
/files/etc/hosts/3/alias[1]
/files/etc/hosts/4/ipaddr
/files/etc/hosts/4/canonical
/files/etc/hosts/4/alias[1]

我想在位于//之间的任何数字前面添加0。在追加之后,结果看起来应该是这样......

/files/etc/hosts/02/ipaddr
/files/etc/hosts/02/canonical
/files/etc/hosts/02/alias[1]
/files/etc/hosts/03/ipaddr
/files/etc/hosts/03/canonical
/files/etc/hosts/03/alias[1]
/files/etc/hosts/04/ipaddr
/files/etc/hosts/04/canonical
/files/etc/hosts/04/alias[1]

我很确定我需要使用简单的正则表达式进行搜索。我认为/\d*/应该足够但我不知道如何修改字符串以插入数字0.有人可以给我一些建议吗?

1 个答案:

答案 0 :(得分:5)

使用:

newString = string.replaceAll("/(\\d)(?=/)", "/0$1");

\\d只有一位数。您可以将\\d+用于一位或多位数字。

$1表示字符串中与括号中出现的第一个内容匹配的部分(有一些例外),因此(\\d)

您需要使用预先(?=...)而不仅仅是/(\\d)/,否则

/files/etc/hosts/3/5/canonical

将成为

/files/etc/hosts/03/5/canonical

而不是

/files/etc/hosts/03/05/canonical

(如果您不使用预测,则在匹配3期间将消耗3到5之间的/,因此它与5)不匹配。

如果上述字符串不是可能的输入,则这不是问题(您只需使用/(\\d)/)。

Java regex reference