Возможные дубликаты:
Идентификация, если URL-адрес присутствует в строке
Php parse links / emails
Я работаю над некоторым PHP-кодом, который вводит данные из разных источников и должен найти URL-адреса и сохранить их где-нибудь. Вид ввода, который необходимо обработать, выглядит следующим образом:
http://www.youtube.com/watch?v=IY2j_GPIqRA Try google: http://google.com! (note exclamation mark is not part of the URL) Is http://somesite.com/ down for anyone else?
Вывод:
http://www.youtube.com/watch?v=IY2j_GPIqRA http://google.com http://somesite.com/
Я уже заимствовал одно регулярное выражение из Интернета, которое работает, но, к сожалению, вытирает строку запроса – нехорошо!
Любая помощь в составлении регулярного выражения или, возможно, другое решение этой проблемы будет оценена по достоинству.
Ян Гойвартс, Regex Guru, рассмотрел этот вопрос в своем блоге . Существует немало предостережений, например, правильное извлечение URL-адресов в круглых скобках. То, что вам нужно, точно зависит от «качества» ваших входных данных.
Для приведенных примеров, \b(?:(?:https?|ftp|file)://|www\.|ftp\.)[-A-Z0-9+&@#/%=~_|$?!:,.]*[A-Z0-9+&@#/%=~_|$]
работает при использовании в нечувствительном к регистру режиме.
Поэтому, чтобы найти все совпадения в многострочной строке, используйте
preg_match_all('/\b(?:(?:https?|ftp|file):\/\/|www\.|ftp\.)[-A-Z0-9+&@#\/%=~_|$?!:,.]*[A-Z0-9+&@#\/%=~_|$]/i', $subject, $result, PREG_PATTERN_ORDER); $result = $result[0];
Почему бы не попробовать этот. Это первый результат Googling «регулярное выражение URL».
((https?|ftp|gopher|telnet|file|notes|ms-help):((\/\/)|(\\\\))+[\w\d:#@%\/;$()~_?\+-=\\\.&]*)
Не PHP, но он должен работать, я просто немного изменил его, вырвав косые черты.
источник