在php中解析有效的url

在php中解析有效的url,php,regex,url,Php,Regex,Url,我有这个正则表达式来过滤掉URL,但它也过滤掉了一些无效的URL $regexUrl = "((https?|ftp)\:\/\/)?"; // SCHEME $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass $regexUrl .= "([a-zA-Z0-9-.]*)\.([a-zA-Z]{2,3})"; // Host or IP

我有这个正则表达式来过滤掉URL,但它也过滤掉了一些无效的URL

$regexUrl = "((https?|ftp)\:\/\/)?"; // SCHEME $regexUrl .= "([a-zA-Z0-9+!*(),;?&=\$_.-]+(\:[a-zA-Z0-9+!*(),;?&=\$_.-]+)?@)?"; // User and Pass $regexUrl .= "([a-zA-Z0-9-.]*)\.([a-zA-Z]{2,3})"; // Host or IP $regexUrl .= "(\:[0-9]{2,5})?"; // Port $regexUrl .= "(\/([a-zA-Z0-9+\$_-]\.?)+)*\/?"; // Path $regexUrl .= "(\?[a-zA-Z+&\$_.-][a-zA-Z0-9;:@&%=+\/\$_.-]*)?"; // GET Query $regexUrl .= "(#[a-zA-Z_.-][a-zA-Z0-9+\$_.-]*)?"; // Anchor $regexUrl=“((https?| ftp)\:\/\/)?”;//计划 $regexUrl.=“([a-zA-Z0-9+!*(),;?&=\$\$\.-]+(\:[a-zA-Z0-9+!*(),;?&=\$\$\.-+)?”;/用户和通行证 $regexUrl.=“([a-zA-Z0-9-.]*)\([a-zA-Z]{2,3})”;//主机或IP $regexUrl.=“(\:[0-9]{2,5}”);//港口 $regexUrl.=“(\/([a-zA-Z0-9+\$\-]\.?)+)*\/?”;//路径 $regexUrl.=“(\?[a-zA-Z+&\$\$\.-][a-zA-Z0-9;:@&%=+\/\$\.-]*)?”;//获取查询 $regexUrl.=“(#[a-zA-Z.-][a-zA-Z0-9+\$\U.-]*)?”;//锚定 例如“http://...XYZ“也由上述正则表达式过滤,但这是无效的url

任何帮助都将不胜感激

$valid = parse_url($url);
你在找什么


这是您要找的吗?

在主机或IP线路中,将
*
更改为
+
,并从第一个
[]
中删除

$regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; // Host or IP 

这样做的效果是要求(使用+)第一个
[]
中的一些字符,并且不允许在它们之间使用
,因为
由第一组后面的
\.
处理(并且是必需的)。

在主机或IP线路中,将
*
更改为
+
,并从第一个
[]
中删除

$regexUrl .= "([a-zA-Z0-9-]+)\.([a-zA-Z]{2,3})"; // Host or IP 

这样做的效果是要求(使用+)第一个
[]
中的一些字符,并且不允许在这些字符中使用
,因为
是由第一组后面的
\.
处理的(并且是必需的)。

不,我正在寻找类似“这是一个很棒的网站,请访问www.xyz.com”现在我需要从消息中过滤掉这个“www.xyz.com”,但是上面的正则表达式并没有过滤无效的“如问题中所示”,就LOL而言,函数名为
parse\u url
infact and BTW,当您在示例URL上运行示例时,真正的LOL就在这里:来自文档:此函数不是要验证给定的URL,它只是将其分解为上面列出的部分。部分url也被接受,parse_url()会尽最大努力正确解析它们。@Michael:我知道这不是。。。但若URL为,则必须进行CURL或其他网络调用才能获取valid@genesis在此上下文中,“验证”并不意味着URL映射到有效的主机,而是意味着模式是有效的
parse_url()
将尽职尽责地解析错误的url“http://...XYZ“作为
[scheme]=>http[host]=>…XYZ
否,我正在寻找类似“这是一个很棒的网站,请访问www.XYZ.com”的内容。现在,我需要从消息中过滤掉这个“www.XYZ.com”,但上面的正则表达式没有过滤无效的内容,“如问题所示”就LOL而言,函数名为
parse_url
infact,顺便说一句,当您在示例url上运行示例时,真正的LOL就在这里:来自文档:此函数不是为了验证给定的url,它只是将其分解为上面列出的部分。部分url也被接受,parse_url()会尽最大努力正确解析它们。@Michael:我知道这不是。。。但若URL为,则必须进行CURL或其他网络调用才能获取valid@genesis在此上下文中,“验证”并不意味着URL映射到有效的主机,而是意味着模式是有效的
parse_url()
将尽职尽责地解析错误的url“http://...XYZ“作为
[scheme]=>http[host]=>…XYZ
您的有效URL是什么?你能再详细说明一下吗?哪些协议对您有效?哪些服务器名?哪个港口?路径重要吗?授权是否有效?为什么可能重复http://...XYZ 无效的url?并非所有域都以
www
开头,以
.com
结尾。例如,
localhost
与www.xyz.com一样是一个有效域。
问题
重复问题
问题也是如此。什么是您的有效URL?你能再详细说明一下吗?哪些协议对您有效?哪些服务器名?哪个港口?路径重要吗?授权是否有效?为什么可能重复http://...XYZ 无效的url?并非所有域都以
www
开头,以
.com
结尾。例如,
localhost
与www.xyz.com一样是一个有效域。
问题
重复问题
问题也是如此。