正则表达式不匹配数据但正则表达式确认有效

use*_*798 0 java regex matcher

我有以下Java程序,它抓取日期时间字符串并在多个正则表达式测试站点中进行测试,以检查它们是否确实有效,他们这样做.

private static final Pattern MATCH_DATE_TIME = Pattern.compile("<span id=\"lblMatchTime\" style=\"padding: 0px;\">([\\d+/ GMT:]+)</span>");
Run Code Online (Sandbox Code Playgroud)

未转义的表达版本

<span id="lblMatchTime" style="padding: 0px;">([\d/ :GMT]+)</span>
Run Code Online (Sandbox Code Playgroud)

以及我在上面测试过的网站.

有以下数据

                    <div style="width: 30%; text-align: center; display: inline-block;">                             <span>                                 Time  :                             </span>                             <span id="lblMatchTime" style="padding: 0px;">05/28/2014 14:16:21 GMT</span>                         </div>                         <div style="width: 30%; text-align: center; display: inline-block;">                             <span>duration:                             </span>                             <span id="lblMatchDuration" style="padding: 0px;">50</span>                             <span>                                 minutes                             </span>                         </div>                     </div>
Run Code Online (Sandbox Code Playgroud)

具有未转义版本的上述两个网站都正确匹配下面的预期数据

<span id="lblMatchTime" style="padding: 0px;">05/28/2014 14:16:21 GMT</span>  //the matched data
05/28/2014 14:16:21 GMT //$1 extracted data
Run Code Online (Sandbox Code Playgroud)

虽然上述两个站点都成功匹配并提取了我的程序没有的数据.

这是我的程序的代码(最小代码示例)

private static final Pattern MATCH_DATE_TIME = Pattern.compile("<span id=\"lblMatchTime\" style=\"padding: 0px;\">([\\d+/ GMT:]+)</span>");

public static void main(String[] args)
{
    try
    {

        String data = JOptionPane.showInputDialog(null, "Please Enter The Match ID", "Grab Match Details", JOptionPane.PLAIN_MESSAGE);
        Matcher m = MATCH_DATE_TIME.matcher(data);
        System.out.println(m.matches());
        String dateTime = m.group(0);
        System.out.println(dateTime);
    }
    catch (IllegalStateException ise)
    {
        ise.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 5

你会想用Matcher#find()而不是Matcher#matches().尝试匹配整个字符串find()时,搜索给定的字符串以查找matches()匹配项.你的正则表达式与整个字符串不匹配.