如何排除“<”在正则表达式匹配

时间:2016-09-24 04:23:03

标签: java regex

我有一个看起来像"<name><address> and <Phone_1>"的字符串。我得到了像

这样的结果
1) <name>
2) <address>
3) <Phone_1>

我尝试过使用正则表达式“&lt;(。*)&gt;”但它只返回一个结果。

3 个答案:

答案 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());
}