正则表达式模式以匹配带有或不带有http:// www的url

2021/01/17 19:21 · php ·  · 0评论

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

到目前为止,我一直在使用许多框架代码,但是我找不到能够与URL匹配http://www.example.com/etcetc但也可以捕获诸如www.example.com/etcetc和的代码example.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);
?>

Courtesy:splattermania在PHP手册上发表的评论http : //php.net/manual/en/function.preg-match.php

regex101中的RegEx演示

在我测试过的所有情况下,这对我都有效:

$url_pattern = '/((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z0-9\&\.\/\?\:@\-_=#])*/';

测试:

http://test.test-75.1474.stackoverflow.com/
https://www.stackoverflow.com
https://www.stackoverflow.com/
http://wwww.stackoverflow.com/
http://wwww.stackoverflow.com


http://test.test-75.1474.stackoverflow.com/
http://www.stackoverflow.com
http://www.stackoverflow.com/
stackoverflow.com/
stackoverflow.com

http://www.example.com/etcetc
www.example.com/etcetc
example.com/etcetc
user:pass@example.com/etcetc

example.com/etcetc?query=aasd
example.com/etcetc?query=aasd&dest=asds

http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-match-url-with-or-without-http-www
http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-match-url-with-or-without-http-www/

每个有效的Internet URL都有至少一个点,因此上述模式将尝试尝试找到至少两个由点链接的字符串,并具有URL可能具有的有效字符。

尝试这个:

/^http:\/\/|(www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,5}(:[0-9]{1,5})?(\/.*)?$/

它的工作原理完全符合人们的需求。

这需要用或出http://https://www

您可以在正则表达式之后使用问号,使其成为有条件的,以便使用:

http:\/\/(www\.)?

这将匹配具有http:// www的任何内容或http://(无www。)

您所能做的就是使用替换方法删除上面的内容,从而获得域。取决于您需要的域。

尝试这样的事情:

.*([\w-]+\.)+[a-z]{2,5}(/[\w-]+)*

我知道这是一篇旧文章,但只是提供了我的解决方案,它是我在stackoverflow上找到的一些答案的组合。

/(https?://)?((?:(\w+-)*\w+)\.)+(?:[a-z]{2})(\/?\w?-?=?_?\??&?)+[\.]?([a-z0-9\?=&_\-%#])?/g

匹配something.comhttp(s)://www[something]://虽然与其他网址不匹配,但出于我的目的,这不是必需的。

正则表达式匹配例如:

http://foo.co.uk/
www.regex.com/foo.html?q=bar$some=thi-ng,regex
regex.foo.com/blog

尝试这个

$url_reg = /(ftp|https?):\/\/(\w+:?\w*@)?(\S+)(:[0-9]+)?(\/([\w#!:.?+=&%@!\/-])?)?/;

您可以尝试以下方法:

r"(http[s]:\/\/)?([\w-]+\.)+([a-z]{2,5})(\/+\w+)? "

选择:

1.可以以http://或https://开头(可选)


2.任何(单词)以点(。)结尾


。3.后跟2至5个字符[az]


4.后跟“ / [任意]“(可选)


5.后跟空格

我一直在使用以下代码,该代码适用于我的所有测试用例,并修复了可能在句子结尾以句号(end.触发或出现单个字符首字母(如“ CC水暖”。以下正则表达式包含多个{2,},表示前一个模式的两个或多个匹配项。

((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]{2,}\.([a-zA-Z0-9\&\.\/\?\:@\-_=#]){2,}

匹配网址,例如但不限于:

非URL不匹配,例如但不限于:

  • CC水管工
  • 句末的句号。
  • 单个字符,例如a.bx.y

请注意:由于上述原因,该名称将不匹配任何单个字符的URL,例如:a.co,但如果以URL方案开头(例如:),则将匹配http://a.co

由于最近的php允许在字符串中使用preg而不起作用,所以我收到了来自@anubhava的太多问题,因此无法从@anubhava那里获得答案$

这是我使用的:

// regex
$re = '/((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+$%_.-]*)?/i';
// match all
preg_match_all($re, $blob, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
// the first element of the array is the full match

这个作曲家软件包在PHP中做得很好

https://github.com/vstelmakh/url-highlight

<?php
use VStelmakh\UrlHighlight\UrlHighlight;

$urlHighlight = new UrlHighlight();
$matches = $urlHighlight->getUrls($string);
?>

如果不必使用正则表达式,则可以始终使用PHP中的Validate过滤器。

filter_var('http://example.com', FILTER_VALIDATE_URL);

filter_var混合$ variable [,int $ filter = FILTER_DEFAULT [,混合$ options]]);

过滤器类型

验证过滤器

本文地址:http://php.askforanswer.com/zhengzebiaodashimoshiyipipeidaiyouhuobudaiyouhttp-wwwdeurl.html
文章标签: ,  
版权声明:本文为原创文章,版权归 admin 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!