Преобразование текста в ссылку с помощью регулярных выражений


Качественные программы предоставляют пользователю большой набор различных удобных и полезных функций. Хорошо продуманный интерфейс берет на себя обработку простых задач, и нам не надо беспокоится о том, чтобы их решать. Например, если набирать строку “www.ruseller.com” в тексте email или в сообщении, можно ожидать, что она станет ссылкой, по которой можно перейти на указанный ресурс, без дополнительных действий по вставке тегов HTML. Другой пример, парсинг текста из фида твиттера. Например, “@desktopped - это блог на английском языке по теме#computers“, можно ожидать, что и @desktopped и #computers будут ссылками. Функция “преобразования текста в ссылку” является великолепным инструментом, который надо использовать при разработке блога или веб сайта. Возможные варианты использования: Преобразование URL адресов в ссылки в тексте содержания, комментариев и везде, где они встречаются Преобразование правильного email адреса в ссылку Преобразование текста из твитера в ссылки на ресурсы, например, @desktopped, #computers, www.ruseller.com. Поиск строки по шаблону, такому как строки, начинающиеся с “http://” или “@”, представляет возможность для улучшения способов обработки и отображения данных в приложениях. Как можно реализовать такие функции? Наилучшим способом для PHP является использование синтаксиса описания текстовых фрагментов, который называется регулярными выражениями, и нескольких функций PHP. Основы регулярных выражений Регулярное выражение — это строка шаблон, которая представляет собой набор строк, состоящих из специальных символов. Основные специальные символы | соединяет два возможных значения и определяет совпадение, если строка соответствует хотя бы одному из значений. Например, hi|hello соответствует строкам “hi” и “hello” () используется для группировки значений и установки порядка операций. Например, br(i|y)an соответствует и “brian” и “bryan”. [] используется для определения совпадений одному из символов, указанному в скобках. [abc] соответствует “a”, “b”, или “c”, но не “d”. * определяет совпадение, если предшествующий элемент либо отсутствует, либо встречается любое количество раз. Строка go*gle соответствует “ggle”, “gogle”, “google”, “gooogle”, и так далее. + определяет совпадение, если предшествующий элемент встречается один или более раз. Строка go+gle соответствует строкам “gogle”, “google”, gooogle”, и так далее. ? определяет совпадение, если предшествующий элемент либо отсутствует, либо встречается один раз. Строка desktopp?ed соответствует строкам “desktopped” и “desktoped”. Другие общие специальные символы \w определяет совпадение с символами, используемыми при составлении слов, то есть с цифробуквенными символами и ‘_’ \n \r и \t определяют совпадение с символами новой строки, переноса каретки и табуляции соответственно. Описание всех специальных символов можно найти здесь: http://www.php.net/manual/en/function.preg-replace.php#89364 на английском языке. Функции PHP: preg_replace Функция preg_replace принимает в качестве аргументов шаблон регулярного выражения, строку замещения, и текст для проверки. Она проверяет текст на соответствие шаблону и в случае совпадения помещает определённый кусок текста в строку замещения. Часть текста, которая помещается в строку замещения, определяется выражением в круглых скобках в строке шаблона. Позиция определяется с помощью символов $0, $1, $2 и так далее, где $n соответствует n-му шаблону в круглых скобках. Пример использования 1 $text= 'My name is Brian'; 2 $pattern = 'My name is (Brian|Sam|Zach)'; 3 $replacement = '$1 is a pretty cool guy.'; 4 echo preg_replace($pattern, $replacement, $text); Код выводит “Brian is a pretty cool guy.”. Если текст будет “My name is Zach”, то код выведет “Zach is a pretty cool guy.”. Но если текст будет “My name is Nick”, то совпадений не будет найдено, и код выведет “My name is Nick”. Полезные функции с использованием регулярных выражений Функция преобразует все URL адреса в тексте в ссылки 1 function link_it($text) 2 { 3 $text= preg_replace("/(^|[\n ])([\w]*?)((ht|f)tp(s)?:\/\/[\w]+[^ \,\"\n\r\t<]*)/is", "$1$2<a href=\"$3\" >$3</a>", $text); 4 $text= preg_replace("/(^|[\n ])([\w]*?)((www|ftp)\.[^ \,\"\t\n\r<]*)/is", "$1$2<a href=\"http://$3\" >$3</a>", $text); 5 $text= preg_replace("/(^|[\n ])([a-z0-9&\-_\.]+?)@([\w\-]+\.([\w\-\.]+)+)/i", "$1<a href=\"mailto:$2@$3\">$2@$3</a>", $text); 6 return($text); 7 } Функция преобразует все строки, начинающиеся с символа фунта (#) и коммерческого ат (@) в хеш теги и ссылки на фид твиттера. 1 function twitter_it($text) 2 { 3 $text= preg_replace("/@(\w+)/", '<a href="http://www.twitter.com/$1" target="_blank">@$1</a>', $text); 4 $text= preg_replace("/\#(\w+)/", '<a href="http://search.twitter.com/search?q=$1" target="_blank">#$1</a>',$text); 5 return $text; 6 } Функция находит все строки в тексте, которые имеют вид :имя_темы: и преобразует их в теги. Например: “This post is about :PHP:.” станет строкой “The post is about PHP“. 1 function tag_it($text) 2 { 3 $text= preg_replace("/:(\w+):/", '<a href="http://www.buildinternet.com/tag/$1/" target="_blank">$1</a>',$text); 4 return $text; 5 } Данная функция выделяет термины поиска в результатах поиска в вашем блоге WordPress. Передайте ей массив ключевых слов и она сделает все остальное (нужно использовать цикл) function highlight_terms($keys_array) { $title = get_the_title(); return preg_replace('/('.implode('|', $keys_array) .')/iu', '<span class="highlight">$0</span>', $title); } Функция получает любую строку (обычно заголовок страницы) и генерирует слаг URL. 1 function create_slug($string) 2 { 3 $string= strtolower(trim($string)); 4 $string= preg_replace('/[^a-z0-9-]/', '-', $string); 5 $string= preg_replace('/-+/', "-", $string); 6 return $string; 7 }