php - 正则表达式模式匹配带有或不带有 http ://www 的 URL

标签 php regex

我根本不擅长正则表达式。

迄今为止,我一直在使用大量框架代码,但我无法找到能够匹配 http://www.example.com/etcetc 等 URL 的代码, 但它也能够捕获类似 www.example.com/etcetcexample.com/etcetc 的内容。

最佳答案

为了匹配所有类型的 URL,下面的代码应该可以工作:

<?php
    $regex = "((https?|ftp)://)?"; // SCHEME
    $regex .= "([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)?@)?"; // User and Pass
    $regex .= "([a-z0-9\-\.]*)\.(([a-z]{2,4})|([0-9]{1,3}\.([0-9]{1,3})\.([0-9]{1,3})))"; // Host or IP
    $regex .= "(:[0-9]{2,5})?"; // Port
    $regex .= "(/([a-z0-9+$_%-]\.?)+)*/?"; // Path
    $regex .= "(\?[a-z+&\$_.-][a-z0-9;:@&%=+/$_.-]*)?"; // GET Query
    $regex .= "(#[a-z_.-][a-z0-9+$%_.-]*)?"; // Anchor
?>

那么,检查正则表达式的正确方法如下:

<?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);
?>

礼貌: splattermania 在 PHP 手册中的评论:http://php.net/manual/en/function.preg-match.php

RegEx Demo in regex101

关于php - 正则表达式模式匹配带有或不带有 http ://www 的 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6427530/

相关文章:

php - style.css 不适用于 PHP 文件(不再重复)

php - 重新排序多维数组,以便每 4 行出现具有特定列值的行

php - PHP 中的关联数组数组

javascript - 多个 URL 的正则表达式

regex - vim 正则表达式查找和替换

php - 未找到接口(interface) 'Silex\ServiceProviderInterface'

regex - Vim:将正则表达式匹配到+ clipboard

regex - 增加字符串中的数字并将其填充为零

python - 如何在 Python 2.7 中编写正则表达式以返回字符串中的两个单词,并在它们之间使用下划线

php - fwrite() 超过 2 GiB?