我正在使用一个基本上正则表达式的正则表达式,用于以下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);
}
我正在测试的两个正则表达式都没有通过。
答案 0 :(得分:1)
您可以使用此正则表达式:
^(http://foo.org/)?(query)?([?])?(id)?([=])?([0-9\\&]*)?(apiKey\\=)?([0-9a-z-A-Z]+)$
---------------------------------------------------------------------------------^
您缺少+
,因为它包含多个字符或数字,因此您的模式不匹配。
我试过了:
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