我有这个正则表达式:
<a href(.*foo.bar.*)a>
对于这个字符串,它只给我一个匹配,但我需要它给3个匹配。
<a href="https://foo.bar/1">First</a> RANDOM TEXT COULD BE HERE <a href="https://foo.bar/2">Second</a> RANDOM TEXT COULD BE HERE <a href="https://foo.bar/3">Third</a>
所以每个a href
都应该是个人的。
我怎么能做到这一点?
编辑:
此代码搜索匹配项:
Pattern pattern = Pattern.compile("<a href(.*foo.bar.*)a>");
Matcher matcher = pattern.matcher(body);
List<String> matches = new ArrayList<String>();
while (matcher.find()) {
matches.add(matcher.group());
}
答案 0 :(得分:6)
更改为:
<a href(.*?foo\.bar.*?)a>
它消除了贪婪。真正的点应该转义为\.
。
答案 1 :(得分:1)
使用.*?
代替.*
。贪心量词匹配尽可能多的字符,而不情愿的量词匹配单个查找操作中最少的字符数。
此外,如果您打算匹配“foo.bar”的文字文本,请使用foo\.bar
。
答案 2 :(得分:0)
希望以下代码可以帮助您:
int noOfTimefoundString = 0;
Pattern pattern = Pattern.compile("<a href=\"https://foo.bar");
Matcher matcher = pattern.matcher(body);
List<String> matches = new ArrayList<String>();
while (matcher.find()) {
matches.add(matcher.group());
noOfTimefoundString++;
}
Iterator matchesItr = matches.iterator();
while(matchesItr.hasNext()){
System.out.println(matchesItr.next());
}
System.out.println("No. of times search string found = "+noOfTimefoundString);