Здравствуйте, нужна помощь с перелинковкой. Сейчас она у меня работает по принципу: если определенное слово(хранящееся в бд) есть в тексте, то оно оборачивается в ссылку на другую статью. Проблема вот в чем: ссылка формируется даже в том случае, если "оперделенное слово" содержится в другом слове (пример: "определенное слово" - чай, слово чрезвычайно на половину преобразовывается в ссылку). А мне надо, чтобы слова преобразовывались в ссылку, только если они начинаются с "определенного слова" - чайный и т.п. Надеюсь понятно объяснил. Вот мой код: PHP: foreach($keyword_links as $link){ if($link->id_news!=$new->id){ $arr[$link->keyword] = "../" . $link->link; } } $str = $new->description; foreach ($arr as $k => $v) { $str = preg_replace("/(".$k.".*?)\b/iu", "<a href='".$v."'>\\1</a>", $str, 1); } echo "<span class='desc'>$str</span>"; Вроде бы вот это PHP: $str = preg_replace("/^(".$k.".*?)\b/iu", "<a href='".$v."'>\\1</a>", $str, 1); то, что мне нужно, но почему-то не работает( Хелп.
А почему foreach, я походу спросони чет не понимаю, давайте о приложении, у нас есть текст, и есть ключевые слова, задача - написать регулярку, в которую мы скармливаем текст, а она, там где есть ключевые слова, окружает их ссылками, так? а ссылки тоже где-то лежат, в соответствии с ключевыми словами
^ - начало строки, это начало всей строки, а не слова, лучше использовать \b, это начало слова(конец слова). PHP: $text = 'Набор слов в которых чай встречается слово нечай, а иногда чрезвычайно или чайный'; // ключевое слово чай $key = 'чай'; // текст ссылки $link = '<a href = "http://ссылка">'.$key.'</a>'; $str = preg_replace("#\b$key#u", "$link", $text); // шаблон поиска - начало слова, ключ, сюда попадет чай и чайный echo $str; я бы рекомендовал все таки ограничивать возможности регулярки и явно указывать какие символы идут после ключа, т.е. $key[a-яА-Я], если конечно, не нужно выделять слова типа чай123 или чай%:?