Java正则表达式组替换

时间:2012-07-13 20:36:58

标签: java regex

有没有办法转换字符串

"m1, m2, m3"

以下

"m1/build, m2/build, m3/build"

仅使用String.replaceAll(regex, replacement)方法?

到目前为止,这是我最好的尝试:

System.out.println("m1, m2, m3".replaceAll("([^,]*)", "$1/build"));
>>> m1/build/build, m2/build/build, m3/build/build

如您所见,输出不正确。但是,在Linux的sed命令中使用相同的正则表达式可以得到正确的输出:

echo 'm1, m2, m3' | sed -e 's%\([^,]*\)%\1/build%g'
>>> m1/build, m2/build, m3/build

2 个答案:

答案 0 :(得分:5)

如果你从另一端看到这个问题(完全是字面意思!),你会得到一个表达式来寻找终结符,而不是内容。这个表达式效果更好:

System.out.println("m1, m2, m3".replaceAll("(\\s*(,|$))", "/build$1"));

这是a link to this program on ideone

答案 1 :(得分:4)

([^,]*)可以匹配空字符串,甚至可以匹配两个空格。试试([^,]+)(\w+)

另一个小注 - 您可以使用$0来引用整个匹配的字符串,从而避免捕获的组:

System.out.println("m1, m2, m3".replaceAll("\\w+", "$0/build"));