Добрый день!
Мне надо заменить некоторое слово в тексте, которое не будет находиться в теге <a>, <h1-6>, <img> и в атрибуте элемента.
Пример:
<a>REPLACEMENT_TEXT</a> - не заменяет
<a href/class/id/...="REPLACEMENT_TEXT.com/..."></a> - не заменяет(т.е. если слово для замены является атрибутом - тоже не заменяем)
<h1>REPLACEMENT_TEXT</h1> - не заменяем
<img src="REPLACEMENT_TEXT.com/..."> - тоже не заменяем
а к примеру
<div id="..."><span>REPLACEMENT_TEXT</span></div> - это заменяем
Помогите пожалуйста, уже который день морочусь с этой задачей.
1. voodoo_dn - 22 Августа, 2014 - 10:07:35 - перейти к сообщению
2. Tyoma5891 - 22 Августа, 2014 - 10:12:26 - перейти к сообщению
код свой покажите который вы написали для решения этой задачи?
3. voodoo_dn - 22 Августа, 2014 - 10:40:54 - перейти к сообщению
$pattern = "/<($avoid_list)[^>]*>[^<]+<\/($avoid_list)>\K(*SKIP)(*FAIL)|$replace_item->find_text/iu";
$replace = "<a href='$replace_item->replace_text'>$replace_item->find_text</a>";
$body = preg_replace($pattern, $replace, $body);
$avoid_list = 'a|h[1-6]|img';
$replace = "<a href='$replace_item->replace_text'>$replace_item->find_text</a>";
$body = preg_replace($pattern, $replace, $body);
$avoid_list = 'a|h[1-6]|img';
4. Tyoma5891 - 22 Августа, 2014 - 10:50:25 - перейти к сообщению
voodoo_dn пишет:
$pattern = "/<($avoid_list)[^>]*>[^<]+<\/($avoid_list)>\K(*SKIP)(*FAIL)|$replace_item->find_text/iu";
$replace = "<a href='$replace_item->replace_text'>$replace_item->find_text</a>";
$body = preg_replace($pattern, $replace, $body);
$avoid_list = 'a|h[1-6]|img';
$replace = "<a href='$replace_item->replace_text'>$replace_item->find_text</a>";
$body = preg_replace($pattern, $replace, $body);
$avoid_list = 'a|h[1-6]|img';
это какой-то фрагмент кода не понятный совсем!
Вам нужно воспользоваться либо составлением правильного регулярного выражения и писать парсер самому, либо готовыми парсерами типа PHP Simple HTML DOM Parser
5. Мелкий - 22 Августа, 2014 - 11:10:33 - перейти к сообщению
Помучайте вот этот вариант:
Вроде бы не накосячил.