使用正则表达式解析URL

时间:2016-12-01 23:21:04

标签: java regex

我一直在尝试从字符串中解析一个地址,并且在选择字符串方面取得了部分成功....

目前我有

Pattern regex = Pattern.compile("[/].*[a-zA-Z](?=\/|:|)", Pattern.DOTALL)

在输入字符串https://www.google.com/上,当前模式为我//www.google.com(这有点正确)但是当我尝试输入字符串https://www.google.com/search?q=Regular+Expressions&num=1000时,它会给我//www.google.com/search?q=Regular+Expressions&num

我要做的是解析地址,使其在:/或空格之前结束

我也想出了

Pattern regex = Pattern.compile("[.*/][^/][a-z].*[a-zA-Z](?=\/|:|)", Pattern.DOTALL) 

并且(部分)使用https://google.com:80给我/google.com

我做错了什么?

2 个答案:

答案 0 :(得分:2)

尝试使用此正则表达式^.*?\/\/([^:\/\s]+),您搜索的部分将存储在第1组中。

Pattern pattern = Pattern.compile("^.*?\\/\\/([^:\\/\\s]+)");
Matcher matcher = pattern.matcher("your input url");
while (matcher.find()) {
    System.out.println("Domain: " + matcher.group(1));
}

编辑:通过在表达式之前匹配//来修复额外的反斜杠问题。

答案 1 :(得分:1)

@NicolasMaltais对此答案的修订应修复额外的/问题(我只显示第一行代码):

Pattern pattern = Pattern.compile("^.*?\\/+([^:\\/\\s]+)");

此模式将在地址前包含任意数量的/个字符。因此,也可以处理类似“file:///my_file.txt”的URL(如果您只关心文件路径的开头)。