PHP网址的详细正则表达式,它兼容端口,文件夹文件名和GET参数:
$pattern = '/^(?:https?:\/\/)?(?:www\.)?([a-zA-Z0-9\.\-]+)(?::(\d+))?((?:\/[\w\-\.]+)*(?:\/[\w\-\.]+\.[a-zA-Z0-9]+)?)?(?:\?(.*))?$/';
该正则表达式的含义如下:
(?:https?:\/\/)?:可选的协议,http或https,(?:)表示不捕获分组。
(?:www\.)?:可选的“www”子域名。
([a-zA-Z0-9\.\-]+):必需的主机名,只允许字母、数字、点和短划线。
(?::(\d+))?:可选的端口号,只允许数字。
((?:\/[\w\-\.]+)*(?:\/[\w\-\.]+\.[a-zA-Z0-9]+)?)?:可选的路径,允许多个文件夹和文件名,最后一个是文件名和文件扩展名,只允许字母、数字、点、短划线和正斜杠。
(?:\?(.*))?:可选的GET参数,只允许字母、数字、点、短划线、下划线、正斜杠和等号。
该正则表达式捕获的组如下:
$matches[1]:主机名。
$matches[2]:端口号。
$matches[3]:路径。
$matches[4]:GET参数。
使用preg_match函数来验证URL是否匹配该正则表达式:
$url = 'http://www.example.com:8080/folder/file.php?param=value';
if (preg_match($pattern, $url, $matches)) {
echo "URL匹配成功!";
} else {
echo "URL匹配失败!";
}
希望这可以帮助到您!