RegExp - посдветка слов вне тегов

Markus®

Guest
RegExp - посдветка слов вне тегов

Подскажите пожалуйста правильный рег.
Нужно подсветить в тексте слово, но не подсвечивать его если оно встречается внутри какого-нибудь тега.
Давно не пользовалься регами и позабыл все напрочь.
Я делаю так (ниже), но как то подсчвечивает через раз. Вобщем блуждаю где то рядом.
Спасибо!

$string = 'Всплеск интереса Internet к глобальной информационной сети Internet наблюдается
сейчас повсеместно. Количество ее пользователей стремительно растет и
уже достигло <a href="http://internetusers.com">http://internetusers.com</a> 40-миллионной Internet отметки Internet. В сложившихся условиях потребность
в информации о сети становится <a href="http://internetusers.com">http://internetusers.com</a> особенно острой. В настоящее
время по Internet бесплатно распространяется множество документов,
касающихся функционирования сети Internet и работы в ней пользователей.';
$string = preg_replace("#([^<]*)(internet)([^>]*)#i","$1<b>$2</b>$3" ,$string);
 

Jaizer

Новичок
а что именно через раз? слово Internet или http://internetusers.com??
 

Burunduk-13

[CBT], Старожил РНРClub'a
Попробуй

Код:
$word = 'Internet';
$string = preg_replace("#((?:^|>)[^<]*?)(".preg_quote($word).")([^>]*?(?:<|\$))#mi","$1<b>$2</b>$3" ,$string);
У меня подсветило все, вне тегов.
 

Markus®

Guest
Burunduk-13
К сожалению не все слова подсвечивает.
В тексте 10 слов Internet, в том числе и в урлах.
2 слова внутри тегов не подсвечивает как надо. Плюс не подсвечивает еще два слова в тексте.
Вот линк на этот пример этого кода http://example.tvoyweb.ru/regexp/
Там же можно убедиться что в коде стоит именно этот рег.
Замучился уже...
 

SelenIT

IT-лунатик :)
Задача в 2 действия: 1) найти текст вне тегов, 2) заменить в найденном что нужно. Использовать preg_replace_callback или обычный preg_replace с модификатором e. Подробности должны быть в поиске по форуму.
 

Markus®

Guest
Все оказалось намного проще :)
Код:
$string = preg_replace("#(".preg_quote($word).")(?![^<]*?>)#i","<b>$1</b>" ,$string);
 
Сверху