首页  >  文章  >  后端开发  >  如何使用正则表达式检测不同格式的 URL?

如何使用正则表达式检测不同格式的 URL?

Susan Sarandon
Susan Sarandon原创
2024-10-22 08:45:30566浏览

How to Detect URLs of Varying Formats Using Regular Expressions?

使用正则表达式检测不同格式的 URL

正则表达式提供了一种从复杂字符串(包括 URL)中提取数据的强大方法。无论您是否使用包含“http://www”前缀的 URL,全面的正则表达式都可以满足您的需求。

以下表达式经过精心设计,可匹配带或不带“http”的 URL ://www" 前缀:

((https?|ftp)://)?([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)?@)?([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))(:[0-9]{2,5})?(/([a-z0-9+$_%-]\.?)+)*/?(\?[a-z+&$_.-][a-z0-9;:@&%=+/$_.-]*)?(#[a-z_.-][a-z0-9+$%_.-]*)?

此表达式包含以下组件:

  • 方案:"(https?|ftp)://"
  • 用户名和密码: "([a-z0-9 !*(),;?&=$_.-] (:[a-z0-9 !*(),;?&=$_.-] )?@)"
  • 主机或 IP 地址:"([a-z0-9-.]*).(([a-z]{2,4})|([0-9]{1 ,3}.([0-9]{1,3}).([0-9]{1,3})))"
  • 端口: "(:[0-9]{2 ,5})?"
  • 路径: "(/([a-z0-9 $_%-].?) )*/?"
  • GET 查询: "(?a-z &$_.-*)?"
  • 锚: "(#a-z_.-*)?"

要使用此表达式,您可以使用下面的 PHP 代码:

if(preg_match("~^$regex$~i", 'www.example.com/etcetc', $m))
    var_dump($m);

if(preg_match("~^$regex$~i", 'http://www.example.com/etcetc', $m))
    var_dump($m);

无论是否存在“http://www”前缀,此代码都会成功匹配两个 URL。

以上是如何使用正则表达式检测不同格式的 URL?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn