PHP: как извлечь URL из фрагмента текста? - PullRequest
4 голосов
/ 11 марта 2009

Допустим, у меня есть большой канал RSS, полный постов в Твиттере, и все они в виде простого текста. Многие посты содержат URL-адреса, и я бы хотел, чтобы эти URL-адреса превращались в ссылки.

Итак, у меня есть переменная, равная:

Визуализация увольнений по отраслям, количеству и дате. С нетерпением ждем аналогичных тенденций найма. http://bit.ly/XBW4z

И я бы хотел, чтобы оно превратилось в:

Визуализация увольнений по отраслям, количеству и дате. С нетерпением ждем аналогичных тенденций найма. http://bit.ly/XBW4z

Как я мог это сделать? Я бесполезен, когда дело доходит до регулярных выражений и тому подобного, поэтому помощь очень ценится!

Ответы [ 6 ]

2 голосов
/ 11 марта 2009

Даже я хочу один ... Проверьте первую ссылку в результате поиска . Она довольно старая!

и кстати смотрите на RHS .. у нас есть похожие вопросы. Распознать URL в текстовом формате регулярное выражение для URL и изображения в тексте или HTML

2 голосов
/ 11 марта 2009

Зависит от того, что вы хотите сопоставить

Хорошее, простое регулярное выражение:

http\://[a-zA-Z0-9./?&_\-]*

Который будет соответствовать любому URL, начинающемуся с http:// и содержащему только символы от [] - от A до Z, от 0 до 9, -, ., /, ?, &.

Если вы хотите сопоставить другие протоколы (https, ftp и т. Д.), Вы можете использовать

(http|ftp|anyotherprotocolyouwant)\://[a-zA-Z0-9./?&_\-]*

Если вы хотите поддерживать больше символов, просто добавьте их к [].

Обновление: забыли поддержку в верхнем регистре! D'о

1 голос
/ 02 апреля 2010

просто для добавления информации ... проверьте этот класс на phpclass.org, он решит вашу проблему ... этот класс найдет ссылки и также преобразует их ...

http://www.phpclasses.org/browse/package/6114.html

1 голос
/ 11 марта 2009

Посмотрите на функцию preg_replace. Так что-то вроде этого:

$regex_url = "((https?|ftp|gopher|telnet|file|notes|ms-help):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)";

preg_replace($regex_url, '<a href="$1">$1</a>', $your_input_string);

Регулярное выражение для URL взято из: http://www.geekzilla.co.uk/view2D3B0109-C1B2-4B4E-BFFD-E8088CBC85FD.htm

1 голос
/ 11 марта 2009

ОК, этот вопрос здесь ( регулярное выражение для URL и изображения в тексте или HTML ) имеет озадачивающий заголовок, но полезный ответ внизу. По крайней мере, это работает для меня и моих дел!

$text = preg_replace('@(http://([\w-.]+)+(:\d+)?(/([\w/_.]*(\?\S+)?)?)?)@', 
                 '<a href="$1">$1</a>', $text);
0 голосов
/ 11 марта 2009

Существуют регулярные выражения, которые соответствуют действительным URL-адресам. Например, полное регулярное выражение для URL , которое получено из грамматического определения URL.

Но лучше явно объявить их, чем пытаться их найти. Потому что в некоторых ситуациях его невозможно различить, если некоторые символы являются частью URL или просто текстом.

...