我想在java中编写一个正则表达式,它将从量词的两边找到最短的可用匹配。
例如,对于此模式"a.*?b"
适用于"aaaaaacbbbbbbb"
:
我想找到"acb"
,但我得到"aaaaaacb"
。
任何人都知道我可以使用哪种正则表达式?
答案 0 :(得分:2)
您想要以'a'
开头并以'b'
结尾的最短序列。这意味着在初始'a'
和最终'b'´, neither an
'之间可能会出现'nor a
'b'`(否则匹配中会包含更短的此类序列),因此< / p>
"a[^ab]*b"
会找到一个最小的序列(第一个出现在搜索的字符串中,或者所有这些,取决于你如何搜索)。
我不喜欢懒惰与贪婪匹配的语法,我认为
"a[^a]*?b"
会做同样的事情,匹配'a'
,非'a'
的最小序列,直到找到下一个'b'
。
答案 1 :(得分:2)
你可以通过放弃贪婪的.*
来模仿不情愿的匹配。在这种情况下,如果您获得组号1,这将变为.*(a.*?b)
:
String example = "aaaaaacbbbbbbb";
Matcher m = Pattern.compile(".*(a.*?b)").matcher(example);
m.find();
System.out.println(m.group(1));