我一直在尝试从字符串中解析一个地址,并且在选择字符串方面取得了部分成功....
目前我有
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
。
我做错了什么?
答案 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(如果您只关心文件路径的开头)。