在测试字符串中重复文本的正则表达式

时间:2014-05-21 14:23:41

标签: java regex

我正在尝试用正则表达式将一些代码替换为另一代码。我正在使用Java,但我认为这与问题

无关
String testString = "sb.Append(\"first string to append(1) \");  sb.Append(\"second string to append(2)\");";
Pattern appendPattern = Pattern.compile("\\s*(\\w+)\\.Append\\((.*)\\);");
Matcher appendMatcher = appendPattern.matcher(testString);
System.out.println(appendMatcher.replaceAll("[$1 appendString: $2];"));

我的预期结果是:

[sb appendString: "first string to append(1) "];  [sb appendString: "second string to append(2)"];

我得到的是:

[sb appendString "first string to append(1) ");  sb.Append("second string to append(2)"];

在决定匹配结束时,.*优先于\\)。 我哪里错了?

2 个答案:

答案 0 :(得分:2)

使用它:

\s*(\w+)\.Append\((.*?)\);

使其与全局修饰符一起变得懒惰

演示:http://regex101.com/r/vV0tN6

答案 1 :(得分:2)

贪婪会尽可能多地消耗。关注.*?进行non-greedy匹配。

\\s*(\\w+)\\.Append\\((.*?)\\);

Working demo