我正在尝试查找以下链接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());
请帮忙。 感谢
答案 0 :(得分:2)
你的正则表达式中有很多错误。
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";
答案 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}
d
(应为\\d
)您应该通过Pattern.compile(regex);
制作模式代码。现在,您正在创建一个与{/ 1}} 匹配的模式,忽略转义和元字符。此外,我认为您可能需要regex
而不是m.matches()
...
答案 2 :(得分:1)
一些事情:
?
,否则意味着“前一个术语的1或0”,所以你丢失了一个角色,这就是为什么它不匹配(技术上你也应该逃避这些点,但是几乎不值得)试试这个:
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))