2016-09-24 90 views
0

我有一个字符串,看起来像"<name><address> and <Phone_1>"。我已经去得到这样如何在正则表达式匹配中排除“<”

1) <name> 
2) <address> 
3) <Phone_1> 

我已经使用正则表达式尝试的结果“<(。*)>”,但只返回一个结果。

+0

什么语言......? –

+0

嗨@Andy ..它在Java中 – DevX

回答

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

在正则表达式模式.*贪婪。它会在找到的第一个<与找到的最后一个可能的>之间匹配尽可能多的字符。在字符串的情况下,它找到第一个<,然后查找尽可能多的文本,直到>,它会在字符串的最后找到它。

你想要一个非贪婪或“懒”模式,它将尽可能少的字符匹配。只需<(.+?)>。问号是非贪婪的语法。另见this question

1

如果您拥有动态数量的组,那么这将起作用。

Pattern p = Pattern.compile("(<\\w+>)"); 
Matcher m = p.matcher("<name><address> and <Phone_1>"); 
while (m.find()) { 
    System.out.println(m.group()); 
}