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

常用 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()@:%_+.~#?&/=]*)$";
这个正则表达式:

- 要求必须有
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));
}
}
}
- 简单匹配可以使用正则表达式
(https?|ftp|file)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|] - 严格验证建议结合正则表达式和
java.net.URI类 - 对于生产环境,考虑使用专门的 URL 解析库如 Apache Commons Validator
选择哪种方法取决于你的具体需求,是简单匹配还是严格验证。
