Я не очень хорошо разбираюсь в регулярных выражениях.
На сегодняшний день я использую много кода фреймворка, но я не могу найти тот, который способен сопоставлять 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\-\.]*)\.(([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 ?>
.<?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 ?>
Затем правильный способ проверки регулярного выражения выглядит следующим образом:
<?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 в regex101
Это работает для меня во всех случаях, которые я тестировал:
$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/
Каждый действующий интернет-URL имеет хотя бы одну точку, поэтому приведенный выше шаблон попробует найти любую по крайней мере две строки, скованные точкой, и имеет допустимые символы, которые могут иметь URL.
Попробуй это:
/^http:\/\/|(www\.)?[a-z0-9]+([\-\.]{1}[a-z0-9]+)*\.[az]{2,5}(:[0-9]{1,5})?(\/.*)?$/
Он работает точно так же, как люди хотят.
Он берется с или без http://
, https://
и www
.
Вы можете использовать знак вопроса после регулярного выражения, чтобы сделать его условным, чтобы вы хотели использовать:
http:\/\/(www\.)?
Это будет соответствовать любому, что есть либо http: // www . или http: // (без www.)
То, что вы можете сделать, это просто использовать метод replace для удаления вышеуказанного, тем самым вы получите домен. Зависит от того, для чего нужен домен.
Я знаю, что это старый пост, но только способствование моему решению, которое представляет собой комбинацию некоторых ответов, которые я нашел здесь, в stackoverflow.
/(https?://)?((?:(\w+-)*\w+)\.)+(?:[az]{2})(\/?\w?-?=?_?\??&?)+[\.]?([a-z0-9\?=&_\-%#])?/g
Соответствует something.com
, http(s)://
или www
. Не совпадает с другим [something]://
URL-адреса, но для моей цели это необязательно.
Регулярное выражение соответствует, например:
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#!:.?+=&%@!\/-])?)?/;
Если это не должно быть регулярное выражение, вы всегда можете использовать фильтры Validate, которые находятся в PHP.
filter_var('http://example.com', FILTER_VALIDATE_URL);
filter_var ( mixed $ variable [, int $ filter = FILTER_DEFAULT [, mixed $ options]]);
Типы фильтров
Проверка фильтров