我有两种类型的字符串:
1) "bla bla <a>interesting</a> bla bzzz"
2) "bla bla <b>interesting bla bzzz"
我需要的是抓住有趣的&#34;子串,最好使用一种模式。
到目前为止我已经
了public static void main(String[] args) {
Pattern pattern = Pattern.compile("(<a>(.*?)</a>)|(<b>(.*?))");
String message = "bzzzzzz <a>AaA</a>efwef<b>BbB";
Matcher matcher = pattern.matcher(message);
while (matcher.find()) {
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println(matcher.group(i));
}
}
}
我想要的结果是
AaA
BbB
但我得到
<a>AaA</a>
AaA
null
null
null
null
<b>
有什么想法吗? 感谢
答案 0 :(得分:2)
<b>(.*?)
将始终与<b>
匹配,因为.*?
与空字符串匹配,并且如果没有,则不会尝试匹配更多。此外,你的正则表达式更多地捕获括号而不是你需要的。
尝试
Pattern pattern = Pattern.compile("<a>(.*?)</a>|<b>(\\S*)");
此模式的后半部分匹配\S
之后的一系列非空白字符(<b>
)。