помогите с регуляркой

Статус
В этой теме нельзя размещать новые ответы.

Juri

Мой дом здесь!
Заблокирован
Регистрация
5 Окт 2007
Сообщения
1.064
Реакции
200
  • Автор темы
  • Заблокирован
  • #1
Здравствуйте, второй день ломаю голову над такой задачей.
Есть кусок текста с html кодом.

Например:

HTML:
<div align="center"><!--dle_image_begin:http://dle.ru1/uploads/boxsmall.jpg|--><img src="http://dle.ru1/uploads/boxsmall.jpg" alt="Добро пожаловать" title="Добро пожаловать"  /><!--dle_image_end--></div>Добро пожаловать на демонстрационную страницу движка DataLife Engine.

в нем нужно слово Добро сделать ссылкой на нужную страницу, как это можно сделать? Естественно в title, alt к картинке оно меняться не должно.
Помогите, заранее спасибо
 
PHP:
$text = preg_replace('#(?<=</div>)(.*?)(Добро)#','$1<a href="">$2</a>',$text);
также вместо 'Добро' можно подставить любое слово после '</div>'
 
  • Нравится
Реакции: Juri
решается и без регулярок, что даже лучше (
Если не нужны сложные правила поиска/замены, использование этой функции предпочтительнее ereg_replace() или preg_replace().
)

PHP:
str_replace('</div>Добро', '</div><a href="#">Добро</a>','<div align="center"><!--dle_image_begin:http://dle.ru1/uploads/boxsmall.jpg|--><img src="http://dle.ru1/uploads/boxsmall.jpg" alt="Добро пожаловать" title="Добро пожаловать"  /><!--dle_image_end--></div>Добро пожаловать на демонстрационную страницу движка DataLife Engine.');
 
  • Автор темы
  • Заблокирован
  • #4
PHP:
$text = preg_replace('#(?<=</div>)(.*?)(Добро)#','$1<a href="">$2</a>',$text);
также вместо 'Добро' можно подставить любое слово после '</div>'

Все бы хорошо, но если слово идет просто посреди текста то замены уже не происходит. Если бы помогли еще это поправить было бы вообще супер
 
попробуйте функцию strripos() - ищет последнее совпадение строки в строке, возвращает позицию последнего совпадения. Можно заменить substr_replace или ещё чем либо
 
  • Автор темы
  • Заблокирован
  • #6
попробуйте функцию strripos() - ищет последнее совпадение строки в строке, возвращает позицию последнего совпадения. Можно заменить substr_replace или ещё чем либо

Вот абы написать, проблема именно в регулярке, сам не могу допетрить как поправить...
 
для случая с переносами строк после </div>: модификатор 's'

PHP:
$text = preg_replace('#(?<=</div>)(.*?)(Добро)#s','$1<a href="">$2</a>',$text);
 
  • Нравится
Реакции: Juri
Вот абы написать, проблема именно в регулярке, сам не могу допетрить как поправить...
нашёл очевидное решение проблемы, взять начало и конец до слова "добро", заменить добро на что нужно и потом склеить 3 части.
модификатор /D в регулярке берёт последнее совпадение в строке.
PHP:
<?
$stroka = '<div align="center"><!--dle_image_begin:http://dle.ru1/uploads/boxsmall.jpg|--><img src="http://dle.ru1/uploads/boxsmall.jpg" alt="Добро пожаловать" title="Добро пожаловать"  /><!--dle_image_end--></div>Добро пожаловать на демонстрационную страницу движка DataLife Engine.';
preg_match_all("/(.*)(Добро)(.*)$/D", $stroka , $parts);
$zamena = '<a href="http://link/">' . $parts[2][0] . '</a>';
$complete = $parts[1][0] . $zamena . $parts[3][0];
echo $complete;
?>
вывод: <div align="center"><!--dle_image_begin:http://dle.ru1/uploads/boxsmall.jpg|--><img src="http://dle.ru1/uploads/boxsmall.jpg" alt="Добро пожаловать" title="Добро пожаловать"  /><!--dle_image_end--></div><a href="http://link/">Добро</a> пожаловать на демонстрационную страницу движка DataLife Engine.
 
удаление гланд через кхм...посмотрите мое решение на несколько постов выше. оно рабочее, пока не доказано обратное:-]
 
  • Автор темы
  • Заблокирован
  • #10
для случая с переносами строк после </div>: модификатор 's'
PHP:
$text = preg_replace('#(?<=</div>)(.*?)(Добро)#s','$1<a href="">$2</a>',$text);

Оказалось правильным решением. Пока работает, посмотрим.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху