【问题标题】:Java's pattern matcher says no match found but matches are print to the consoleJava 模式匹配器说没有找到匹配项,但匹配项会打印到控制台
【发布时间】:2014-06-20 07:01:39
【问题描述】:

我写了一个匹配器来匹配下面的文本。

<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 欧元

并引发错误,未找到匹配项。为什么会这样?如果我只是捕获该异常并获取数据可以吗?或者应该怎么处理?

【问题讨论】:

  • 你是如何使用匹配器的?向我们展示代码。
  • 作为站点注释,您不需要所有这些反斜杠:Pattern.compile("&lt;/TD&gt;&lt;TD&gt;&lt;P&gt;(.*?)&lt;/P&gt;") 也可以,简单易读……

标签: java regex matcher


【解决方案1】:

我猜你使用的匹配器不正确:

    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

【讨论】:

  • 他也想匹配EUR 0.30
  • @AvinashRaj:该代码也适用于第二个示例。我省略了它以避免混乱。无论如何,我已经更新了答案以包括这两种情况。
【解决方案2】:

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

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){}

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-23
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-11-19
    相关资源
    最近更新 更多