java - 使用正则表达式解析 URL

标签 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=正则+表达式&num

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

我也想出了

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

它(部分)与 https://google.com:80 配合使用,为我提供 /google.com

我做错了什么?

最佳答案

试试这个正则表达式 ^.*?\/\/([^:\/\s]+) ,您要搜索的部分存储在组 1 中。

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

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

关于java - 使用正则表达式解析 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40922207/

相关文章:

java - 使用 Spring Security 通过 2 个生产服务器进行 Web 应用程序用户身份验证

python - 解析 METAR 字符串的温度

带有 JSON 数组的 MYSQL REGEXP

java - 如何让2个线程共享数据? ( java )

java - 使用接口(interface) Class<T> 作为键来获取具体的实例值?

c++ - 生成的getters和setters代码格式

regex - Delphi中的RegEx剥离回车符和换行符

regex - Pandas 替换中的严格正则表达式

java - 线程 "main"org.pdfclown.util.parsers.ParseException : 'name' table does NOT exist 中的异常

java - Apache 池2 : examples?