Intereting Posts
Разбор JSON в PHP «stdClass не удалось преобразовать в строку» У Firefox есть проблемы при загрузке с пространством в имени файла Совершенно новый для PHP: Catchable fatal error: объект класса stdClass не может быть преобразован в строку Что мне нужно для совместимого заголовка электронной почты Предотвратите ввод пустой формы из отправки пустого значения в базу данных после ее удаления с помощью jquery и ajax Как назначить значение переменной javascript переменной php 500 с помощью CodeIgniter Повторные данные PHP SimpleXML Jquery Date picker не может сохранять в базе данных php Используйте Require_once () для правильного включения переменных подключения базы данных APNS + PHP "stream_socket_client (): Не удалось включить криптографию" Доступ к внешней переменной с использованием анонимной функции в качестве параметров Как сбросить CURLOPT_CUSTOMREQUEST PHP shuffle не работает, как ожидалось, на моем вложенном массиве ServiceManager в ZF3

PHP: регулярное выражение для получения URL-адреса из строки

Возможные дубликаты:
Идентификация, если 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, но он должен работать, я просто немного изменил его, вырвав косые черты.

источник