Нужна помощь - регулярное выражение

Olldman
На сайте с 21.04.2010
Offline
79
643

Делаю замену в тексте "слово" на "<a href="any_way" title="Это тайтл со 'слово'">слово</a>", т.е. определенные слова в тексте заменяются ссылками(слова/ссылки берутся из БД).

Собственно все сделал, но один косячек портит картинку, а именно: если "слово" в тексте и "слово" в title совпадают, то замена происходит и в title, что естественно не нужно.

Нужно регулярное выражение, чтобы исключить замену в title и в alt(если картинка).

Сама замена:

if($db->numrows($need_w) > 0){

while($need_words = $db->fetchrow($need_w)){
$news['textshort'] = preg_replace("'".$need_words['linkreptext']."'","".$need_words['linkrepurl']."",$news['textshort'],1);
}
}

Ребята, кто дружит с php, подскажите пожалуйста как это реализовать? В регулярках я совсем никак...

AlikZP
На сайте с 22.11.2009
Offline
107
#1

А зачем там регулярка? Обычная замена текста

$afterText = str_ireplace('слово', '<a href="any_way" title="Это тайтл со \'слово\'">слово</a>', $beforeText);
Website CMS: быстрая, удобная, недорогая! Вечная лицензия за 45$ (/ru/forum/524503) Яся - быстрый поиск фото для товаров. OpenCart/ocStore. Дополнение. (/ru/forum/665287) Грамотная верстка ваших макетов (/ru/forum/comment/8853216)
edka
На сайте с 17.01.2010
Offline
208
#2

Просто замену слова нужно юзать, регулярка тут лишнее совсем :)

Olldman
На сайте с 21.04.2010
Offline
79
#3

Дело в том, что при этом происходит замена и в title(alt). Т.е. конкретный пример что получается, если в тексте находится картинка:

Некий текст <img src="news/any.jpg" alt="приватизации"> со словом приватизации

После замены получается:

Некий текст <img src="news/any.jpg" alt="<a href="article/" title="приватизации">приватизации</a>"> со словом <a href="article/" title="приватизации">приватизации</a>

alexandr_nv
На сайте с 23.04.2009
Offline
39
#4

Olldman я понял, что вы хотите.

Вот простейший пример, как заменить "слово", которое не находится внутри тэга



$text = preg_replace("/слово(?![^<]*>)/ms", "<a href='#' title='слово'>слово</a>", $text)

То есть, используя т.н. "negative lookahed" смотрим, чтобы впереди слова небыло знака ">" (или перед ним был "<")

Olldman
На сайте с 21.04.2010
Offline
79
#5

Воооот, что и было нужно! Спасибо огромное!

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий