正则expression式模式来匹配具有或不具有http:// www的url

我根本不擅长正则expression式。

迄今为止我一直在使用很多框架代码,但是我找不到能够匹配像http://www.example.com/etcetc这样的URL的http://www.example.com/etcetc但也能够像www.example.com/etcetc一样www.example.com/etcetcexample.com/etcetc

任何帮助将是伟大的。 多谢你们!

为了匹配以下代码的所有types的URL应该工作:

 <?php $regex = "((https?|ftp)://)?"; // SCHEME $regex .= "([a-z0-9+!*(),;?&=$_.-]+(:[a-z0-9+!*(),;?&=$_.-]+)?@)?"; // User and Pass $regex .= "([a-z0-9\-\.]*)\.(([az]{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 ?> 

然后,正确的方法来检查正则expression式如下:

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

RegEx Demo在regex101

这在我testing的所有情况下都适用于我:

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

testing:

 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/ 

每个有效的互联网URL至less有一个点,所以上面的模式只会试图find任何至less两个链接点的string,并具有URL可能有效的字符。

尝试这个:

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

它和人们想要的一模一样

它使用或不使用http://https://www

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

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

这将匹配任何具有http:// www 。 或http://(没有www。)

你可以做的只是使用replace方法来删除上述,从而让你的域名。 取决于你需要的域名。

我知道这是一个旧的post,但只是贡献我的解决scheme,这是我在这里find的一些答案的组合stackoverflow。

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

匹配something.comhttp(s)://www 。 不匹配其他[something]://虽然,但为我的目的,这是没有必要的。

正则expression式匹配例如:

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

尝试这样的事情:

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

尝试这个

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

如果它不一定是正则expression式,那么你总是可以使用PHP中的validationfilter。

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

filter_var ( mixed $ variable [, int $ filter = FILTER_DEFAULT [, mixed $ options]]);

filter的types

validationfilter