首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PHP中使用和不使用协议对URL进行正则化

在PHP中使用和不使用协议对URL进行正则化
EN

Stack Overflow用户
提问于 2011-08-03 22:29:20
回答 1查看 516关注 0票数 0

所以我得到了这个URL regex:

/(?:((?:^-/"':!=a-z0-9_@|^|\:))((https?://)((?:^\p{P}\p{Lo}\s.-|^\p{P}\p{Lo}\s)+.a-z{2,}(?::0-9+)(/?:(?):([a-Z0-9!*‘;::=+$/%#[[]-_,~]++\\$/%#[[]-_,~]+/\?(?:[a-Z0-9!*‘;:=+$$/%#[]-_~],(?!\s))*a-Z0-9=#/?)?(a-Z0-9!*’);:&=+$/%#[]-_.,~]*a-Z0-9_&&=#/)/iux

它目前正在匹配的是:

  • http://www.google.com
  • http://google.com

我也需要它来匹配:

  • www.google.com
  • google.com

我试着将协议作为regex可选的一部分,通过扇一个?“在结尾”(https?:\//)?但这没什么用。

想法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-03 22:30:52

我会用你用来做这件事的语言寻找一些东西。URL很难与正则表达式相匹配。如果你坚持,我改变了你的,使(https?://)可选。不过我没查过。

代码语言:javascript
复制
/(?:((?:[^-/"':!=a-z0-9_@]|^|\:))((https?://)?((?:[^\p{P}\p{Lo}\s].-|[^\p{P}\p{Lo}\s])+.[a-z]{2,}(?::[0-9]+)?)(/(?:(?:([a-z0-9!*';:=+\$/%#[]-_,~]+))|@[a-z0-9!*';:=+\$/%#[]-_,~]+/|[.\,]?(?:[a-z0-9!*';:=+\$/%#[]-_~]|,(?!\s)))*[a-z0-9=#/]?)?(\?[a-z0-9!*'();:&=+\$/%#[]-_.,~]*[a-z0-9_&=#/])?))/iux

我从RFC 3986获得了这个例子,是由这句话指导的。尽管如此,我还是建议您使用您正在使用的任何语言中的一些东西,而不是正则表达式。

代码语言:javascript
复制
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?

既然您使用的是PHP,那么您考虑过使用url吗?看起来它会在坏urls上返回false。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6934069

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档