Java的模式匹配器表示找不到匹配项,但匹配项打印到控制台

时间:2014-06-20 07:01:39

标签: java regex matcher

我已经写了一篇匹配来自以下文字的匹配器。

<TD><P>xyz...  </P><P>Oiuye </P><P>Oture, </P><P>Option</P></TD><TD><P> EUR 0.20 </P></TD><Span></Span>     
<TD><P>Foriegn </P></TD><TD><P> EUR 0.30 </P></TD><Span></Span>

我想使用的模式是: -

Pattern p = Pattern.compile("\\</TD\\>\\<TD\\>\\<P\\>(.*?)\\</P\\>");Matcher m_Fee_1 = p_Fee_1.matcher(row_xml);          
m_Fee_1.find();
String Contract_Fee_Temp = m_Fee_1.group(1).trim(); 

我需要筹集0.20欧元和0.30欧元。

我的控制台显示 0.20欧元 0.30欧元

并抛出一个错误,找不到匹配项。为什么会这样?如果我只是捕获该异常并获取数据,这没关系吗?或者我该如何处理?

2 个答案:

答案 0 :(得分:3)

我认为你错误地使用了匹配器:

    String[] str = new String[]{"<TD><P>xyz...  </P><P>Oiuye </P><P>Oture, </P><P>Option</P></TD><TD><P> EUR 0.20 </P></TD><Span></Span> ", "<TD><P>Foriegn </P></TD><TD><P> EUR 0.30 </P></TD><Span></Span>"};
    Pattern p = Pattern.compile("\\</TD\\>\\<TD\\>\\<P\\>(.*?)\\</P\\>");
    for (String st : str) {
        Matcher m = p.matcher(st);
        while (m.find()) {
            System.out.println(m.group(1));
        }
    }

收率:

EUR 0.20 
EUR 0.30

答案 1 :(得分:1)

如果你已经得到了你所需要的东西,你就可以捕获异常。

try{
Pattern p = Pattern.compile("\\</TD\\>\\<TD\\>\\<P\\>(.*?)\\</P\\>");Matcher m_Fee_1 = p_Fee_1.matcher(row_xml);          
m_Fee_1.find();
String Contract_Fee_Temp = m_Fee_1.group(1).trim(); 
//Print what ever you want
}
catch(IllegalStateException exception){}