6

有没有办法转换字符串

"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
4

2 回答 2

5

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

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

这是ideone 上该程序的链接

于 2012-07-13T20:41:39.917 回答
4

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

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

System.out.println("m1, m2, m3".replaceAll("\\w+", "$0/build"));
于 2012-07-13T20:41:24.903 回答