ReplaceAll仅替换第一次出现的子串

时间:2017-05-10 14:53:02

标签: java regex replaceall

我想用"替换第一个括号内的'。第二个括号内的子串应保持不变。例如:

String test = "(\"test1\", \"test2\") (\"test3\", \"test4\")"; //wanted output is ('test1', 'test2') ("test3", "test4")
String regex = "(^[^\\)]*?)\"(.*?)\"";
test = test.replaceAll(regex, "$1'$2'");
System.out.println(test); // output is ('test1', "test2") ("test3", "test4")
test = test.replaceAll(regex, "$1'$2'");
System.out.println(test); // output is ('test1', 'test2') ("test3", "test4")

为什么在第一次调用replaceAll时不会替换test2周围的"

1 个答案:

答案 0 :(得分:1)

这是使用边界匹配器\G的好用例:

String test = "(\"test1\", \"test2\") (\"test3\", \"test4\")";
final String regex = "(^\\(|\\G(?!^),\\h*)\"([^\"]+)\"";

test = test.replaceAll(regex, "$1'$2'");
System.out.println(test);
//=> ('test1', 'test2') ("test3", "test4")

\G断言上一场比赛结束时的位置 或第一场比赛的字符串开头

RegEx Demo