java正则表达式匹配器错误

时间:2014-05-13 07:24:51

标签: java regex error-handling

我正在尝试查找以下链接http://anythingbutrbitrary.blogspot.in/search?updated-max=2014-02-10T11:58:00-08:00&max-results=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());

请帮忙。 感谢

3 个答案:

答案 0 :(得分:2)

你的正则表达式中有很多错误。

  1. 您正在调用Pattern.quote,这将使您的正则表达式为文字。
  2. 点和?等元字符需要转义为\\.\\?
  3. 编辑:看了你的正则表达式后我发现这也错了。使用此正则表达式:

    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 :(得分:1)

Pattern.quote()可能无法按照您的意愿行事......

来自online API

  

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

     

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

此外,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. 应该逃避期间(否则你将匹配任何字符。但这对于这个特定情况并不重要)
  2. 与1相同。
  3. 转义问号(表示“前一个字符中的一个或一个”,这肯定不会产生正确的结果)
  4. 忘记逃避d(应为\\d
  5. 破折号而不是冒号
  6. 您应该通过Pattern.compile(regex);制作模式代码。现在,您正在创建一个与{/ 1}} 匹配的模式,忽略转义和元字符。此外,我认为您可能需要regex而不是m.matches() ...

答案 2 :(得分:1)

一些事情:

  • 用反斜杠转义?,否则意味着“前一个术语的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))