跟进这个问题 Regex to match pattern with subdomain in java
我使用以下模式匹配域和子域
Pattern pattern = Pattern.compile("http://([a-z0-9]*.)example.com");
此模式与以下
匹配http://asd.example.com
http://example.example.com
http://www.example.com
但它不匹配
http://example.com
任何人都可以告诉我如何匹配http://example.com
吗?
答案 0 :(得分:1)
只需使用?
Pattern pattern = Pattern.compile("http://([a-z0-9]*\\.)?example\\.com");
请注意.
匹配任何字符,您应使用\\.
来匹配文字点。
答案 1 :(得分:0)
您可以使用此正则表达式模式获取所有网址的域名:
\\p{L}{0,10}(?:://)?[\\p{L}\\.]{1,50}
例如;
Input = http://www.google.com/search?q=a
Output = http://www.google.com
Input = ftp://www.google.com/search?q=a
Output = ftp://www.google.com
Input = www.google.com/search?q=a
Output = www.google.com
这里,\ p {L} {0,10}代表http,https和ftp部分(可能还有一些我不知道),(?:: //)?代表://部分如果出现,[\ p {L} \。] {1,50}代表foo.bar.foo.com部分。网址的其余部分被剪掉了。
这是完成工作的java代码:
public static final String DOMAIN_PATTERN = "\\p{L}{0,10}(?:://)?[\\p{L}\\.]{1,50}";
public static String getDomain(String url) {
if (url == null || url.equals("")) {
return "";
}
Pattern p = Pattern.compile(DOMAIN_PATTERN);
Matcher m = p.matcher(url);
if (m.find()) {
return m.group();
}
return "";
}
public static void main(String[] args) {
System.out.println(getDomain("www.google.com/search?q=a"));
}
Output = www.google.com
最后,如果您只想匹配“example.com”,您只需将其添加到模式的末尾,如:
\\p{L}{0,10}(?:://)?[\\p{L}\\.]{0,50}example\\.com
这将通过“example.com”获得所有域名:
Input = http://www.foo.bar.example.com/search?q=a
Output = http://www.foo.bar.example.com
注意:请注意\ p {Ll}可以用来代替\ p {L},因为\ p {Ll}捕获小写的unicode字母(\ p {L}所有类型的unicode字母)并且url由小写构成字母。