Java Regex从响应中获取特定字符串

Java Regex从响应中获取特定字符串,java,regex,Java,Regex,我的回答如下 <adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode> <adm:TargetCode key="urn:comcast:altcon:activityState">ACTIVE</adm:TargetCode> 不活动 活跃的 使用regex如何从中获取字符串INACTIVE和ACTIVE字符串 我可以使用split方

我的回答如下

<adm:TargetCode key="urn:comcast:altcon:activityState">INACTIVE</adm:TargetCode>

  <adm:TargetCode key="urn:comcast:altcon:activityState">ACTIVE</adm:TargetCode>
不活动
活跃的
使用regex如何从中获取字符串
INACTIVE
ACTIVE
字符串


我可以使用split方法,但它包含很多代码。为了减少代码,我更喜欢使用regex。但是如何继续使用regex?

使用regex您可以使用:

Pattern p1 = Pattern.compile(">(.*)<");
Matcher m1 = p1.matcher("<adm:TargetCode key=\"urn:comcast:altcon:activityState\">INACTIVE</adm:TargetCode>");
while (m1.find()) {
    System.out.println(m1.group(1));
}

Pattern p1=Pattern.compile(“>(.*)使用正则表达式可以使用:

Pattern p1 = Pattern.compile(">(.*)<");
Matcher m1 = p1.matcher("<adm:TargetCode key=\"urn:comcast:altcon:activityState\">INACTIVE</adm:TargetCode>");
while (m1.find()) {
    System.out.println(m1.group(1));
}

Pattern p1=Pattern.compile(“>(*)您试图解析的内容看起来像html,您应该更喜欢使用html解析器而不是正则表达式

您可以使用以下代码轻松解析数据

String s = "<adm:TargetCode key=\"urn:comcast:altcon:activityState\">INACTIVE</adm:TargetCode>\r\n" + 
        "<adm:TargetCode key=\"urn:comcast:altcon:activityState\">ACTIVE</adm:TargetCode>";
Document doc = Jsoup.parse(s);
for (Element element : doc.getElementsByTag("adm:TargetCode")) {
    System.out.println(element.text());
}
尽管有时,如果您试图解析的数据中没有嵌套结构,可以使用正则表达式。对于这种情况,您可以使用此正则表达式

(?<=>)[^><\n]+(?=<)
打印标记中的两个值

INACTIVE
ACTIVE

另外,另一个答案的问题是,它在
>(.*)
中使用
*
,因此,在匹配代码>
后,它会贪婪地匹配任何字符,包括您试图解析的内容看起来像html,您应该更喜欢使用html解析器而不是正则表达式

您可以使用以下代码轻松解析数据

String s = "<adm:TargetCode key=\"urn:comcast:altcon:activityState\">INACTIVE</adm:TargetCode>\r\n" + 
        "<adm:TargetCode key=\"urn:comcast:altcon:activityState\">ACTIVE</adm:TargetCode>";
Document doc = Jsoup.parse(s);
for (Element element : doc.getElementsByTag("adm:TargetCode")) {
    System.out.println(element.text());
}
尽管有时,如果您试图解析的数据中没有嵌套结构,可以使用正则表达式。对于这种情况,您可以使用此正则表达式

(?<=>)[^><\n]+(?=<)
打印标记中的两个值

INACTIVE
ACTIVE

另外,另一个答案的问题是,它在
>(.*)
中使用
*
,因此,在匹配一个代码>
后,它会贪婪地匹配任何字符,包括
,在我的情况下,响应将包含许多活动的非活动字符串…当我尝试使用代码输出时,大约100行将变为“>非活动的
”尝试的代码:``模式p1=Pattern.compile(“>(*)使用
matcherm1=p1.Matcher(“非活动的”\r\n“+”\r\n“+“活动的”);
在我的情况下,响应将包含许多活动的非活动字符串…当我尝试代码输出时,大约有100行是“>非活动的<”尝试的代码:``模式p1=Pattern.compile(“>(*))使用
Matcher m1=p1.Matcher(“非活动的”+“\r\n”+“活动的”);