Intereting Posts
Как заставить переменные сеанса сохраняться в перенаправлении заголовков? Как проверить, является ли текущая страница плагиновой панель администратора в wordpress PHP – удалить запятую из последнего цикла YII2: Добавить поля динамической формы и их проверки Composer не получает установленные окна 7 Как должен выглядеть HTTP Post для сохранения модели и связанных с ней данных модели? Загрузите файл, созданный в выходном буфере PHP, из вызова AJAX Почему я не могу получить доступ к переменным сеанса symfony из других файлов? PHP – переместить файл в другую папку на сервере Ограничить выполнение PHP? Не удалось найти перенос сокетов «ssl» – вы забыли включить его при настройке PHP? Кто-нибудь успешно использовал jonnyw's php phantomjs с laravel, в ubuntu envirement? Легкий сервер веб-приложений для PHP? Проблемы с анализом данных JSON Как игнорировать случай при анализе с помощью simplexml?

Связать функцию регулярного выражения PHP Daring Fireball Method

Итак, я знаю, что на SO есть много связанных вопросов, но ни один из них не совсем то, что я ищу. Я пытаюсь реализовать функцию PHP, которая будет конвертировать текстовые URL-адреса из созданного пользователем сообщения в ссылки. Я использую «улучшенное» Regex из Daring Fireball в нижней части страницы: http://daringfireball.net/2010/07/improved_regex_for_matching_urls Функция ничего не возвращает, и я не знаю, почему.

<?php if ( false === function_exists('linkify') ): function linkify($str) { $pattern = '(?xi)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”'']))'; return preg_replace($pattern, "<a href=\"\\0\" rel=\"nofollow\" target=\"_blank\">\\0</a>", $str); } endif; ?> 

Может кто-то, пожалуйста, помогите мне заставить это работать? Благодаря!

Попробуй это:

 $pattern = '(?xi)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`\!()\[\]{};:\'".,<>?«»“”'']))'; return preg_replace("!$pattern!i", "<a href=\"\\0\" rel=\"nofollow\" target=\"_blank\">\\0</a>", $str); 

Функция preg PHP действительно нуждается в разделителях . i в конце делает его нечувствительным к регистру

Обновить

Если вы используете # как разделитель, вам не нужно бежать ! в шаблоне как таковой используется исходная строка шаблона (у шаблона нет # ): "#$pattern#i"

Обновление 2

Чтобы убедиться, что ссылки правильные, сделайте следующее:

 $pattern = '(?xi)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”'']))'; return preg_replace_callback("#$pattern#i", function($matches) { $input = $matches[0]; $url = preg_match('!^https?://!i', $input) ? $input : "http://$input"; return '<a href="' . $url . '" rel="nofollow" target="_blank">' . "$input</a>"; }, $str); 

Теперь он добавит http:// к URL-адресам, чтобы браузер не думал, что это относительная ссылка.

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

 /** * Returns the urls in an array from a string. * This dos NOT return the string, only the urls with-in. */ function get_urls($str){ $regex = '(?xi)\b((?:https?://|www\d{0,3}[.]|[a-z0-9.\-]+[.][az]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?«»“”'']))'; preg_match_all("#$regex#i", $str, $matches); $urls = $matches[0]; return $urls; }