我想通过Matcher& amp;从全局字符串中检索字符串。使用REGEX的模式。
String str = "<strong>ABC</strong>123<strong>DEF</strong>"
Pattern pattern = Pattern.compile("<strong>(.*)</strong>");
Matcher matcher = pattern.matcher(str);
我的问题是,匹配器只给了我一个匹配全局标签内的匹配:
ABC</strong>123<strong>DEF
我的目标是获得2场比赛:
ABC
DEF
非常感谢你的帮助。
答案 0 :(得分:2)
你需要一个非贪婪的正则表达式:
Pattern pattern = Pattern.compile("<strong>.*?</strong>");
使用?
指定非贪婪。这意味着它将匹配它找到的第一个匹配而不是最外面的匹配...
如果你只想要ABC
和DEF
那么你可以使用lookaheads和lookbehinds做这样的事情:
String str = "<strong>ABC</strong>123<strong>DEF</strong>";
Pattern pattern = Pattern.compile("((?<=<strong>).*?(?=</strong>))");
Matcher matcher = pattern.matcher(str);
while(matcher.find())
{
System.out.println(matcher.group());
}
如果你进行谷歌搜索,你应该能够找到关于前瞻和后视的信息......
答案 1 :(得分:2)
我建议使用JSOUP
解析您的HTML
代码,而不是正则表达式
Document doc = Jsoup.parse("<strong>ABC</strong>123<strong>DEF</strong>");
// select your tag
Elements elements = doc.select("strong");
// get the iterator to traverse all elements
Iterator<Element> it = elements.iterator();
// loop through all elements and fetch their text
while (it.hasNext()) {
System.out.println(it.next().text());
}
输出:
ABC
DEF
或将输出作为单个字符串
Document doc = Jsoup.parse("<strong>ABC</strong>123<strong>DEF</strong>");
Elements elements = doc.select("strong");
System.out.println(elements.text());
输出:
ABC DEF
Download Jsoup并将其添加为依赖项