1

我有这个正则表达式:

<a href(.*foo.bar.*)a>

对于这个字符串,它只给我 1 个匹配项,但我需要它提供 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());
}
4

3 回答 3

6

改成:

<a href(.*?foo\.bar.*?)a>

它消除了贪婪。真正的点应该被转义到\..

于 2013-06-27T06:59:48.187 回答
1

使用.*?而不是.*. 贪婪量词匹配尽可能多的字符,而勉强量词匹配单个查找操作中的最少字符数。

此外,foo\.bar如果您打算匹配“foo.bar”的文字文本,请使用。

于 2013-06-27T07:22:01.997 回答
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);
于 2013-06-27T07:12:03.863 回答