Java 勉强从量词两边匹配

标签 java regex reluctant-quantifiers

我想用 java 编写一个正则表达式,它将从量词的两边找到最短的可用匹配。

例如,对于此模式 "a.*?b" 应用于 "aaaaaacbbbbbbb":

我想找到 "acb" 但我得到了 "aaaaaacb"

有人知道我可以使用哪个正则表达式吗?

最佳答案

您可以通过丢弃贪婪的 .* 从一开始就模仿不情愿的匹配。在这种情况下,这将变为 .*(a.*?b),如果您获得组号 1:

String example = "aaaaaacbbbbbbb";
Matcher m = Pattern.compile(".*(a.*?b)").matcher(example);
m.find();
System.out.println(m.group(1));

关于Java 勉强从量词两边匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16656142/

相关文章:

ruby - 在 ruby​​ 中从字符串中解析 token 的更清晰的方法

java - 在正则表达式中使用不情愿的量词

java - XMLEventWriter 不写入输出流

java - AssertJ:如何使 JsonNode 比较处理 IntNode 和 LongNode 相同?

regex - 帮助正则表达式包含和排除

正则表达式:懒惰更糟吗?

java - 不情愿的量词在 Javascript 中不起作用

java - 在 Java 中保留泛型的封装

java - JDOQL/Java/GAE 中按日期时间查询

python - grep 不允许我写 `[:alpha:]` 当我的意思是 `[:alph]` 但其他工具可以