杰瑞科技汇

java 正则表达式匹配url

Java 正则表达式匹配 URL

在 Java 中,可以使用正则表达式来匹配 URL,以下是一个完整的解决方案,包括一个实用的正则表达式和示例代码。

java 正则表达式匹配url-图1
(图片来源网络,侵删)

常用 URL 正则表达式

以下是一个相对全面的 URL 匹配正则表达式:

String urlRegex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";

这个正则表达式匹配:

  • http://, https://, ftp://file:// 开头的 URL
  • 包含字母、数字、部分特殊字符的 URL
  • 正确处理 URL 中的路径、查询参数和片段

完整示例代码

import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UrlMatcher {
    public static void main(String[] args) {
        // 要测试的文本
        String text = "访问我们的网站 https://www.example.com/path?query=value#fragment 或 ftp://files.example.com";
        // URL 正则表达式
        String urlRegex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
        // 编译正则表达式
        Pattern pattern = Pattern.compile(urlRegex);
        Matcher matcher = pattern.matcher(text);
        // 查找所有匹配的 URL
        while (matcher.find()) {
            System.out.println("找到 URL: " + matcher.group());
        }
    }
}

更严格的 URL 验证

如果需要更严格的 URL 验证,可以使用以下正则表达式:

String strictUrlRegex = "^https?://(?:www\\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$";

这个正则表达式:

java 正则表达式匹配url-图2
(图片来源网络,侵删)
  • 要求必须有 http://https://
  • 可选的 www. 前缀
  • 更严格的域名和路径验证

使用 Java 11+ 的 java.net.URI

对于更可靠的 URL 验证,建议结合使用正则表达式和 Java 的 URI 类:

import java.net.URI;
import java.net.URISyntaxException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UrlValidator {
    public static boolean isValidUrl(String url) {
        // 先用正则表达式初步筛选
        String urlRegex = "(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]";
        if (!url.matches(urlRegex)) {
            return false;
        }
        // 然后用 URI 类进一步验证
        try {
            URI uri = new URI(url);
            return !uri.getHost().isEmpty();
        } catch (URISyntaxException e) {
            return false;
        }
    }
    public static void main(String[] args) {
        String[] testUrls = {
            "https://www.example.com",
            "http://example.com/path?query=value",
            "ftp://files.example.com",
            "invalid-url",
            "https://"
        };
        for (String url : testUrls) {
            System.out.println(url + " 是有效 URL? " + isValidUrl(url));
        }
    }
}
  1. 简单匹配可以使用正则表达式 (https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]
  2. 严格验证建议结合正则表达式和 java.net.URI
  3. 对于生产环境,考虑使用专门的 URL 解析库如 Apache Commons Validator

选择哪种方法取决于你的具体需求,是简单匹配还是严格验证。

分享:
扫描分享到社交APP
上一篇
下一篇