Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум Регулярные Выражения

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Регулярные выражения: Выделить ссылку жирным, если это внешняя ссылка
 
 автор: igsavenko   (25.04.2011 в 16:23)   письмо автору
 
 

Добрый вечер. у меня задача появилась, нужно на языке PHP с использованием регулярных выражений сделать следующее. Предположим <a title="" href="" target=""></a>. Нужно ссылку взять в тег например <b><a title="" href="" target=""></a></b>, но только в том случае если внутри нет localhost. т.е. ссылка внешняя. Спасибо.

  Ответить  
 
 автор: cheops   (25.04.2011 в 16:56)   письмо автору
 
   для: igsavenko   (25.04.2011 в 16:23)
 

Можно начать отталкиваться от следующего скрипта
<?php
  $text 
'Добрый вечер. у меня задача появилась, нужно на языке PHP '.
          
'с использованием регулярных выражений сделать следующее. '.
          
'Предположим <a title="" href="http://localhost/" target="">ссылка</a>.'.
          
'Нужно ссылку взять в тег например '.
          
'<b><a title="" href="http://softtime.ru" target="">ссылка</a></b>, '.
          
'но только в том случае если внутри нет localhost. т.е. ссылка внешняя. Спасибо.';
  
$pattern "|(<a[^>]+href=\")([^\"]+)(\"[^>]+>.*?</a>)|is";
  echo 
preg_replace_callback($pattern"replace"$text);

  function 
replace($match)
  {
    if(
preg_match("|localhost|i"$match[2]))
      
// Локальный хост - возвращаем ссылку без изменений
      
return $match[1].$match[2].$match[3];
    else
      
// Внешний хост - возвращаем жирную ссылку
      
return "<b>".$match[1].$match[2].$match[3]."</b>";
  }
?>

  Ответить  
 
 автор: igsavenko   (25.04.2011 в 17:32)   письмо автору
 
   для: cheops   (25.04.2011 в 16:56)
 

спасибо, буду пробывать, а не подскажете как просто вытащить весь тег <a ВСЕ ЧТО УГОДНО> ВСЕ ЧТО УГОДНО</a>. я написал вот такое
'/\<a(.*?)\<\/a\>/i
' но почему то не работает.

Помоему нашел проблему а как вызвать в preg_match_callback функцию которая находится в одном классе и она private. $this->functionMy не работает :(

  Ответить  
 
 автор: cheops   (25.04.2011 в 18:58)   письмо автору
 
   для: igsavenko   (25.04.2011 в 17:32)
 

>'/\<a(.*?)\<\/a\>/i
Попробуйте такое регулярное выражение
'/<a[^<]+<\/a>/is

PS Отлаживать регулярные выражения лучше вне больших систем - это не самая простая вещь, и лучше исключить ошибки других систем вроде классов, чтобы полностью сосредоточиться на составлении подходящего выражения.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования