Java Regex不匹配

时间:2017-05-18 13:59:49

标签: java regex

我正在使用一个基本上正则表达式的正则表达式,用于以下URL:

http://foo.org/query?id=234934&apiKey=FNSJDS3442939

正则表达式是:

^(http://foo.org/)?(query)?([?])?(id)?([=])?([0-9\\&]*)?(apiKey\\=)?([0-9a-z-A-Z])$

使用在线测试仪时,我可以验证模式是否匹配。我正在使用this。但是当我在我的代码中运行它时,它不匹配。事实上,当我使用在线正则表达式测试器时,它说它看到了模式,但它不匹配。我假设正则表达式测试程序正在使用java.util.Regex.Matcher的matches()方法进行测试。有人能告诉我为什么这不完全匹配吗?

更新:

仍然无法通过建议解决这个问题,所以我会发布我的方法:

public void regexHttp(List<String> url) {
    String badURL = "^(http://foo.org/)?(query)?([?])?(id)?([=])?([0-9\\&]*)?(apiKey\\=)?([0-9a-z-A-Z]+)$";
    String badURLTwo = "^(http://f.oo/)?([0-9a-zA-Z]+)$";
    Pattern r = Pattern.compile(badURL);
    Pattern s = Pattern.compile(badURLTwo);
    for(int a = 0; a < url.size(); a++)
    {
        Matcher m = r.matcher(url.get(a));
        Matcher n = s.matcher(url.get(a));
          if (m.find()) {
              url.remove(url.get(a));
           }    
         // else
            //  if (url.get(a).matches(badURLTwo))
             // {
                //  url.remove(url.get(a));
              //}
    }
    send.randomizeLinks(url);
}

我正在测试的两个正则表达式都没有通过。

1 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

^(http://foo.org/)?(query)?([?])?(id)?([=])?([0-9\\&]*)?(apiKey\\=)?([0-9a-z-A-Z]+)$
---------------------------------------------------------------------------------^

您缺少+,因为它包含多个字符或数字,因此您的模式不匹配。

ideone demo

我试过了:

String str = "http://foo.org/query?id=234934&apiKey=FNSJDS3442939";
System.out.println(str.matches("^(http://foo.org/)?(query)?([?])?(id)?([=])?([0-9\\&]*)?(apiKey\\=)?([0-9a-z-A-Z]+)$"));

,输出为:

true