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