Java regexp组替换

Mic*_*ian 6 java regex

有没有办法转换String

"m1, m2, m3"
Run Code Online (Sandbox Code Playgroud)

以下

"m1/build, m2/build, m3/build"
Run Code Online (Sandbox Code Playgroud)

只能通过使用String.replaceAll(regex, replacement)方法?

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

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

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

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

das*_*ght 5

如果从另一端看问题(非常简单!),你会得到一个表达式来寻找终结符,而不是内容.这个表达式效果更好:

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

以下是ideone上此程序的链接.


Kob*_*obi 4

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

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

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