我有一个看起来像"<name><address> and <Phone_1>"
的字符串。我得到了像
1) <name>
2) <address>
3) <Phone_1>
我尝试过使用正则表达式“&lt;(。*)&gt;”但它只返回一个结果。
答案 0 :(得分:1)
你想要的正则表达式是
<([^<>]+?)><([^<>]+?)> and <([^<>]+?)>
然后会在3个捕获组中吐出你想要的东西。完整的代码看起来像这样:
Matcher m = Pattern.compile("<([^<>]+?)><([^<>]+?)> and <([^<>]+?)>").matcher(string);
if (m.find()) {
String name = m.group(1);
String address = m.group(2);
String phone = m.group(3);
}
答案 1 :(得分:1)
正则表达式中的模式.*
是贪心。它会在找到的第一个<
和它可以找到的最后一个>
之间匹配尽可能多的字符。对于您的字符串,它会找到第一个<
,然后查找尽可能多的文本,直到>
,它将在字符串的最后找到。
你想要非贪婪或&#34;懒惰&#34;模式,它将匹配尽可能少的字符。只需<(.+?)>
。问号是非贪婪的语法。另请参阅this question。
答案 2 :(得分:1)
如果您有动态的组数,这将有效。
Pattern p = Pattern.compile("(<\\w+>)");
Matcher m = p.matcher("<name><address> and <Phone_1>");
while (m.find()) {
System.out.println(m.group());
}