Впрос по регулярке (PHP)

12
D
На сайте с 28.06.2008
Offline
1101
765

Есть некий кусок кода, который в определенном разделе делает нечто вроде перелинковки.

Находит слова по маске и делает их ссылками.

Проблема в том - что находит первое совпадение и делает 1 ссылку и все.

Как изменить код - чтобы все найденные совпадения становились ссылками:

$temp = ConsulHelperQuery::linkSearchLek($item->text);

if(!empty($temp))
{
$item->text = preg_replace("#".$temp->word."?([^A-Za-zА-Яа-я])#isu",'<a href="'.$temp->url.'">'.$temp->word.'</a>$1',$item->text);
}
A
На сайте с 19.07.2010
Offline
130
#1

буковку "g" добавить нужно.

$temp = ConsulHelperQuery::linkSearchLek($item->text);

if(!empty($temp))
{
$item->text = preg_replace("#".$temp->word."?([^A-Za-zА-Яа-я])#isgu",'<a href="'.$temp->url.'">'.$temp->word.'</a>$1',$item->text);
}
.............
D
На сайте с 28.06.2008
Offline
1101
#2

Замена isu на isgu вырезала вообще весь текст - в данном вопросе (это вопросы пользователей) пропадало все, весь текст.

A
На сайте с 19.07.2010
Offline
130
#3
Dram:
Замена isu на isgu вырезала вообще весь текст - в данном вопросе (это вопросы пользвателей) пропадало все, весь текст.

при копировании с форума на форум ничего не пропало?

ручками попробуйте эту буковку добавить

D
На сайте с 28.06.2008
Offline
1101
#4

Я изначально руками букву и прописал, щас перепроверил - да, весь текст вырезается

RiDDi
На сайте с 06.06.2010
Offline
256
#5

потомушо нет в перле флага g

возникает ошибка поэтому текста нет

preg_replace по умолчанию работает в безлимитном режиме и должно заменять всё найденное

проблема, видимо, в конкретном тексте который не попадает под условие которое у вас стоит после искомого слова

приведите текст в котором не работает полностью замена

Вебмастер отдыхает на бережках морей. Заработок в интернете - дело техники.
D
На сайте с 28.06.2008
Offline
1101
#6
Бoлезнь обнаружена 15 лет назад. Лeчения не вeлось. Иногда прoвожу сопутсвующую терапию таблетками: гeптрал, ливoдeкса, aспирин, фoсфоглив, витaмин e. Подскажите как правильно их принимать?

Ссылкой становится только Гeптрал, хотя должны еще - ливoдекса, aспирин, фoсфoглив

RiDDi
На сайте с 06.06.2010
Offline
256
#7

и зачем там метасимвол "?" посередине?

что бы отрезать окончание?

чет не пойму ))

---------- Добавлено 01.12.2016 в 19:34 ----------

Dram:
Ссылкой становится только Гептрал, хотя должны еще - ливодекса, аспирин, фосфоглив

ну, а в $temp->word что?

видимо, там Гeптрал вот только он и заменяется..

D
На сайте с 28.06.2008
Offline
1101
#8

Я не кодер, вот нашел выше в коде

function searchRelated($name, $section_id, $id)
{
$words = preg_split('#[0-9\W_]+#u', $name, -1, PREG_SPLIT_NO_EMPTY);
if(!empty($words))
{
$sql = array();
$sql2 = array();
foreach($words as $word)
{
$sql[] = "t1.name LIKE ".$this->_db->quote('%'.$word.'%');
$sql2[] = "t1.name NOT LIKE ".$this->_db->quote('%'.$word.'%');
}



---------- Добавлено 01.12.2016 в 19:38 ----------

Вопрос наверное чтобы не учитывать окончания - ведь люди по разному писать могут

---------- Добавлено 01.12.2016 в 19:39 ----------

Если я изменю вопрос юзера и поставлю первым ливодексу - то она станет ссылкой

RiDDi
На сайте с 06.06.2010
Offline
256
#9

выведите

echo $temp->word;exit;

и покажите что в этой переменной

видимо, там слова через пробел что ли

тогда будет только последнее искаться

D
На сайте с 28.06.2008
Offline
1101
#10

Нет - есть раздел сайта с лекарствами, есть поле в базе с названием препарата. Вот если это название попадается в тексте - оно должно стать ссылкой на препарат. Сейчас все работает как надо - не устраивает только то - что ссылкой становится первый найденный препарат, остальные так и остаются текстом.

Нигде нет какого-то набора слов.

12

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