我正在努力让我的正则表达式模式匹配。这是我的要求......
将以下域名(google.com)与http和https匹配。
我有各种网址的数组列表......
http://stackoverflow.com/questions/ask
https://ask.com/search
http://google.com/images
https://google.com/images
这是我的模式:
final Pattern p = Pattern.compile( "(http:(?!.*google.com).*)" );
但是,它现在对我的所有网址都返回true。
同样,如果http://www.google.com或https://www.google.com与我当前的网址匹配,我只希望它返回true。
答案 0 :(得分:1)
仅.contains("//google.com")
怎么样?或者如果"google.com"
位于第七或第八位?
答案 1 :(得分:1)
使用此:
Pattern.compile("^(https?://(?![^.]*\\.google\\.com)[^/]*)");
答案 2 :(得分:1)
java.net.URI或URL类怎么样......
try {
URI url = new URI("https://www.google.com/foo?test=horse");
System.out.println(url.getScheme()); // https
System.out.println(url.getHost()); // www.google.com
System.out.println(url.getPath()); // /foo
System.out.println(url.getQuery()); // test=horse
} catch (URISyntaxException e) {
e.printStackTrace();
}
编辑:我使用了URI,因为我记得在某个地方看到URL有副作用。刚检查过,hashCode()方法进行DNS查找。因此,如果您只想重新使用URL解析功能,请坚持使用URI ...请参阅此question
答案 3 :(得分:0)
final Pattern p = Pattern.compile( "(https?:(?!.*google.com).*)" );
答案 4 :(得分:0)
我只希望它在http://www.google.com或者https://www.google.com时返回true {{3}}与我当前的网址匹配。
Pattern.compile("(?i)^https?://www\\.google\\.com\\z");
答案 5 :(得分:0)
String[] urls = new String[] {
"http://stackoverflow.com/questions/ask",
"https://ask.com/search",
"http://google.com/images",
"https://google.com/images",
"http://www.google.com"
};
final Pattern p = Pattern.compile( "https?://.*?google\\.com.*?" );
for (String url : urls) {
Matcher m = p.matcher(url);
System.out.println(m.matches());
}
输出是:
false
false
true
true
true