我有一个字符串,看起来像"<name><address> and <Phone_1>"
。我已经去得到这样如何在正则表达式匹配中排除“<”
1) <name>
2) <address>
3) <Phone_1>
我已经使用正则表达式尝试的结果“<(。*)>”,但只返回一个结果。
我有一个字符串,看起来像"<name><address> and <Phone_1>"
。我已经去得到这样如何在正则表达式匹配中排除“<”
1) <name>
2) <address>
3) <Phone_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);
}
在正则表达式模式.*
是贪婪。它会在找到的第一个<
与找到的最后一个可能的>
之间匹配尽可能多的字符。在字符串的情况下,它找到第一个<
,然后查找尽可能多的文本,直到>
,它会在字符串的最后找到它。
你想要一个非贪婪或“懒”模式,它将尽可能少的字符匹配。只需<(.+?)>
。问号是非贪婪的语法。另见this question。
如果您拥有动态数量的组,那么这将起作用。
Pattern p = Pattern.compile("(<\\w+>)");
Matcher m = p.matcher("<name><address> and <Phone_1>");
while (m.find()) {
System.out.println(m.group());
}
什么语言......? –
嗨@Andy ..它在Java中 – DevX