java正则表达式匹配器错误

java正则表达式匹配器错误,java,regex,error-handling,Java,Regex,Error Handling,我正在试图找到以下链接的正则表达式http://anythingbutrbitrary.blogspot.in/search?updated-最大值=2014-02-10T11:58:00-08:00&最大结果=1 我的正则表达式代码http://anythingbutrbitrary.blogspot.in/search?updated-max=\\d{4}-\\d{2}-d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}-\\d{2}&max results=\\d{1}返回f

我正在试图找到以下链接的正则表达式http://anythingbutrbitrary.blogspot.in/search?updated-最大值=2014-02-10T11:58:00-08:00&最大结果=1

我的正则表达式代码http://anythingbutrbitrary.blogspot.in/search?updated-max=\\d{4}-\\d{2}-d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}-\\d{2}&max results=\\d{1}返回false。正则表达式有什么问题?我的java代码如下:

String regex= "http://anythingbutrbitrary.blogspot.in/search?updated-max=\\d{4}-\\d{2}-d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}-\\d{2}&max-results=\\d{1}";
Pattern p=Pattern.compile(Pattern.quote(regex));
Matcher m = p.matcher("http://anythingbutrbitrary.blogspot.in/search?updated-max=2014-02-10T11:58:00-08:00&max-results=1");
System.out.println(m.lookingAt());
请帮忙。
谢谢你的正则表达式中的几个错误

您正在调用Pattern.quote,这将使您的正则表达式成为文本。 元字符,如点和?需要转义到\\。和\\? 编辑:在查看你的正则表达式后,我发现这也是错误的。使用此正则表达式:

String regex="http://anythingbutrbitrary\\.blogspot\\.in/search\\?updated-max=\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}:\\d{2}&max-results=\\d";

你的正则表达式有几个错误

您正在调用Pattern.quote,这将使您的正则表达式成为文本。 元字符,如点和?需要转义到\\。和\\? 编辑:在查看你的正则表达式后,我发现这也是错误的。使用此正则表达式:

String regex="http://anythingbutrbitrary\\.blogspot\\.in/search\\?updated-max=\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}:\\d{2}&max-results=\\d";
Pattern.quote可能无法执行您希望它执行的操作

从:

此方法生成一个字符串,该字符串可用于创建与字符串匹配的模式,就像它是文字模式一样

输入序列中的元字符或转义序列没有特殊意义

此外,lookingAt javadoc还指出:

当且仅当输入序列的前缀匹配此匹配器的模式时返回:true

正则表达式中很少有小错误,周围有两颗星:

http://anythingbutrbitrary**.**blogspot**.**in/search**?**updated-max=\\d{4}-\\d{2}-**d{2}**T\\d{2}:\\d{2}:\\d{2}-\\d{2}**-**\\d{2}&max-results=\\d{1}
应该使用转义符,否则将匹配任何字符。不过,对于这个具体案例来说,这并不重要 与1相同。 避开问号表示前面的字符中有一个或没有一个,这肯定不会产生正确的结果 忘记转义d应该是\\d 破折号代替冒号 您应该通过执行pattern.compileregex;来生成模式代码;。现在,您正在创建一个与regex原样匹配的模式,忽略转义和元字符。此外,我认为您可能需要m.matches而不是m.lookingAt…

Pattern.quote可能不符合您的要求

从:

此方法生成一个字符串,该字符串可用于创建与字符串匹配的模式,就像它是文字模式一样

输入序列中的元字符或转义序列没有特殊意义

此外,lookingAt javadoc还指出:

当且仅当输入序列的前缀匹配此匹配器的模式时返回:true

正则表达式中很少有小错误,周围有两颗星:

http://anythingbutrbitrary**.**blogspot**.**in/search**?**updated-max=\\d{4}-\\d{2}-**d{2}**T\\d{2}:\\d{2}:\\d{2}-\\d{2}**-**\\d{2}&max-results=\\d{1}
应该使用转义符,否则将匹配任何字符。不过,对于这个具体案例来说,这并不重要 与1相同。 避开问号表示前面的字符中有一个或没有一个,这肯定不会产生正确的结果 忘记转义d应该是\\d 破折号代替冒号 您应该通过执行pattern.compileregex;来生成模式代码;。现在,您正在创建一个与regex原样匹配的模式,忽略转义和元字符。此外,我认为您可能需要m.matches而不是m.lookingAt…

两件事:

逃走?用反斜杠,否则它意味着上一个术语的1或0,所以你失去了一个字符,这就是为什么它在技术上不匹配。你也应该避开这些点,但几乎不值得 改用String.matches-它更容易使用 试试这个:

String regex = "http://anythingbutrbitrary.blogspot.in/search\\?updated-max=\\d{4}-\\d{2}-d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}-\\d{2}&max-results=\\d";
if (urlStr.matches(regex))
两件事:

逃走?用反斜杠,否则它意味着上一个术语的1或0,所以你失去了一个字符,这就是为什么它在技术上不匹配。你也应该避开这些点,但几乎不值得 改用String.matches-它更容易使用 试试这个:

String regex = "http://anythingbutrbitrary.blogspot.in/search\\?updated-max=\\d{4}-\\d{2}-d{2}T\\d{2}:\\d{2}:\\d{2}-\\d{2}-\\d{2}&max-results=\\d";
if (urlStr.matches(regex))

您还需要转义Java中不需要的反斜杠\/No。您还需要转义Java中不需要的反斜杠\/No。我想这就是我说的?我还不够清楚吗?我以为我是这么说的?我还不够清楚吗?