我有这个常规例外:
(?:([^\:]*)\:\/\/)?(?:([^\:\@]*)(?:\:([^\@]*))?\@)?(?:([^\/\:]*)\.(?=[^\.\/\:]*\.[^\.\/\:]*))?([^\.\/\:]*)(?:\.([^\/\.\:]*))?(?:\:([0-9]*))?(\/[^\?#]*(?=.*?\/)\/)?([^\?#]*)?(?:\?([^#]*))?(?:#(.*))?
1)如果解析网址:http://test.ru/long/path/file.ext?queryparam=123&more=234 - 确定
2)如果解析网址:ftp://admin:pass@server.com/long/path/file.ext - 确定
3)但是,如果在GET参数中存在[AT](@),它就不能正常工作!
示例:http://test.ru/long/path/file.ext?queryparam=123&mail=test@domain.com
PS。在stackoverflow上找到常规异常,但不记得主题。:(
答案 0 :(得分:3)
这是错误的,因为它是一个格式错误的网址。
网址应为
http://test.ru/long/path/file.ext?queryparam=123&mail=test%40domain.com
而不是格式错误的test@domain.com。
javascript函数encodeURIComponent('@');
是你的朋友:D
答案 1 :(得分:2)
如果您正在尝试解析URL,则不是正则表达式。 PHP有一个名为parse_url()的内置函数,可以将URL分解为段,以便轻松访问。更高效,更少的代码。此外,您可以使用parse_str()进一步细分查询细分。最后,如果您想要分解路径,也可以使用pathinfo()。 PHP拥有所有这些,您只需要开始使用它们。