Поиск ключевых слов по тексту

Neuromancer

Новичок
Доброго времени суток.

Есть задача - сделать автоматическую перелинковку в текстах статей на новостном сайте.Есть список ключевых слов, которые должны заменяться линками.Но есть проблема - некоторые ключевые фразы содержат в себе друг друга - т.е. "новости", "последние новости", "последние новости Украины".

Я пытался реализовать через цикл, простой заменой по шаблону, но в таком случае ссылки вкладываются друг в друга - если фраза содержит в себе часть другой ключевой фразы.

Собственно вопрос - как это можно реализовать?Мне кажется решение где то на поверхности, но я что то туплю
 

Neuromancer

Новичок
Сделал.Бесполезно - сначала выделяет самые длинные, а потом внутрь пихает те что покороче
 

Beavis

Banned
добавь цикл, который ищет вхождение текущей фразы в списке уже замененных
 

Neuromancer

Новичок
Немного подробнее можно?Что мне делать если я нашел вхождение текущей в уже замененной?

PHP:
uksort(GPU_Storage_SeoWords::$array, array($this, "compare_length"));
        foreach (GPU_Storage_SeoWords::$array as $word => $val) {
            $match = preg_match('<a[^>]*>(.*?)' . $word . '(.*?)</a>', $text);
            if (!$match) {
                $text = preg_replace("/" . $word . "/i", "<a href=" . $lang . $val . ">" . $word . "</a>", $text);
            }
        }
Вот как выглядит цикл сейчас
 

Beavis

Banned
не, так получится сложно
я бы сделал так:
отсортировал фразы по длине, в тексте заменил бы эти фразы какими-нибудь обозначениями, например %1, %2 и т.д.
а потом бы уже заменил эти обозначения ссылками
 
Сверху