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

标签 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)"];

在决定比赛结束位置时,.* 优先于 \\)。 我哪里错了?

最佳答案

贪婪会尽可能多地消耗。在 .* 后面加上 ? 得到 non-greedy匹配。

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

Working demo

关于java - 用于在测试字符串中重复文本的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23786064/

相关文章:

javascript - HH :MM:SS 的正则表达式

java - 匹配 "| "的正则表达式

python - 正则表达式匹配未被注释掉的行

Java 正则表达式 dotall

java - Apache CXF 日期时区

java - 屏幕方向卡在模拟器上

java - 将数据从 Android 应用程序发送到 cakephp 的whith url

java - Python 和 Java 在 RegEx 语法上的差异

java - 如何创建广播接收器?

regex - 如何创建仅在主题行开头搜索文本的 Gmail 过滤器?