正则expression式模式来匹配具有或不具有http:// www的url
我根本不擅长正则expression式。
迄今为止我一直在使用很多框架代码,但是我找不到能够匹配像http://www.example.com/etcetc
这样的URL的http://www.example.com/etcetc
但也能够像www.example.com/etcetc
一样www.example.com/etcetc
和example.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.com
, http(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