Регулярное выражение, чтобы соответствовать все действительные ссылки - PullRequest
2 голосов
/ 14 января 2009

В отношении этого: http://stackoverflow.uservoice.com/pages/general/suggestions/103227-parser-does-not-match-all-valid-urls является ли это регулярное выражение адекватным или его необходимо уточнить, если его необходимо уточнить, как это так?

\b(?P<link>(?:.*?://)[\w\-\_\.\@\:\/\?\#\=]*)\b

Ответы [ 2 ]

13 голосов
/ 20 января 2009

Несмотря на то, что вопрос неопределенный, я попытаюсь ответить возможными решениями.

Возможное намерение 1 : Для соответствия любым URL-адресам в данном файле (для замены):

/^([^:]+):\/\/([-\w._]+)(\/[-\w._]\?(.+)?)?$/ig

Вышеуказанное должно соответствовать почти всем форматам URL со следующими захваченными группами:

0 => entire match
1 => protocol (eg. http, ftp, git, ...)
2 => hostname (eg. www.stackoverflow.com)
3 => requested_file_path (eg. /images/prod/1/4/success.gif)
4 => query_string (eg. param=1&param2=2&param3=3)

Возможное намерение 2 : Получить подробную информацию о текущем URL запроса

Чтобы получить более подробную информацию о URL, такую ​​как протокол, имя хоста, запрошенный путь к файлу и строка запроса, лучше использовать методы языка / объекта для сбора результатов. В php вы можете получить всю вышеуказанную информацию, используя вызовы функций:

$protocol = $_SERVER['SERVER_PROTOCOL']; // HTTP/1.0
$host = $_SERVER['HTTP_HOST']; // www.stackoverflow.com
$path_to_file = dirname($_SERVER['SCRIPT_NAME']);
$file = basename($_SERVER['SCRIPT_NAME']);
$query_string = $_SERVER['QUERY_STRING'];

Надеюсь, это поможет.

0 голосов
/ 19 июня 2010

Полагаю, через какое-то время блокируются комментарии? Ответ localalshred великолепен, за исключением пропущенных подстановочных знаков и неэкранированных периодов:

    /^([^:]+):\/\/([-\w\._]+)(\/[-\w\._]*\?(.+)?)?$/ig
                                        ^-- wildcard
                        ^
    we dont want to match everything ^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...