Модераторы: Aliance, skyboy, MoLeX, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Регулярка для поиска нескольких слов 
:(
    Опции темы
ksnk
Дата 13.7.2009, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 12
Всего: 386



сортировка массива по длине значения...
Код

$tags = array(
  5 => 'река Каракол',
  7 => 'город Каракол',
  21 => 'ущелье Каракол',
  1=>'Каракол',
);

uasort($tags,create_function('&$a,&$b','
   if (strlen($a) == strlen($b)) return 0;
   return (strlen($a) > strlen($b)) ? -1 : 1;
'));
var_dump($tags);




--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
KgCoder
Дата 13.7.2009, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Цитата(ksnk @  13.7.2009,  11:14 Найти цитируемый пост)
сортировка массива по длине значения...

Уже отсортировал, но спасибо. Не могли бы вы еще подсказать, что делать с этим: 
Цитата(KgCoder @  13.7.2009,  11:06 Найти цитируемый пост)
Сделал сортировку. Использую мой регулярку.
Результат: Karakol river, goes near Karakol peak and enters Karakol city. Once more Karakol
Тег Каракол будучи последним втискивается в уже отмеченный Karakol river. :(



Это сообщение отредактировал(а) KgCoder - 13.7.2009, 11:25
PM MAIL   Вверх
enof
Дата 13.7.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 35



Можно проверить, есть ли перед или после слова открывающий и закрывающий теги <a>.

Добавлено через 6 минут и 12 секунд
Вот так это будет выглядеть:
Код

foreach($tags as $id=>$tag)
    $text = preg_replace('#(?!<a[^>]+>)('.preg_quote($tag, '#').')(?!</a>)#iu', '<a href="tag/TAG['.$id.']">$1</a>', $text);

Этот же способ подойдет и к варианту ksnk.
PM MAIL ICQ Skype   Вверх
KgCoder
Дата 13.7.2009, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



enof, действительно. Спасибо... сейчас попробую.
PM MAIL   Вверх
KgCoder
Дата 13.7.2009, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Простите, но у меня не выходит. Сделал так:
Код

    ...
    $result = db_query($query);
    while ($term = db_fetch_object($result)) {
      $glossary_term[$term->tid] = $term->name;
    }
    usort($glossary_term, "order_by_length");
    foreach ($glossary_term as $tid => $term) {
      $pattern = '#(?!<span class="advanced-glossary-term info-tip"[^>]+>)('.preg_quote($term, '#').')(?!</span>)#iu';
      $replacement = '<span class="advanced-glossary-term info-tip" id="term-' . $tid . '">' . $term . '</span>';
      if (variable_get('advanced_glossary_teaser', TRUE)) {
        $node->teaser = preg_replace($pattern, $replacement, $node->teaser,
          variable_get('advanced_glossary_link_first_only', true) ? 1 : -1);
      }
      $node->body = preg_replace($pattern, $replacement, $node->body,
        variable_get('advanced_glossary_link_first_only', true) ? 1 : -1);
    }
    ...

Резултат такой же:
Karakol river, goes near Karakol peak and enters Karakol city. Once more Karakol

PM MAIL   Вверх
enof
Дата 13.7.2009, 16:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 35



Код

$tags = array(
  5 => 'река Каракол',
  7 => 'город Каракол',
  21 => 'ущелье Каракол',
  1=>'Каракол',
);
foreach($tags as $id=>$tag)
    $text = preg_replace('#(?!<a[^>]+>)('.preg_quote($tag, '#').')(?!</a>)#iu', '<a href="tag/TAG['.$id.']">$1</a>', $text);
echo $text;

А так все работает?
PM MAIL ICQ Skype   Вверх
KgCoder
Дата 13.7.2009, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Цитата(enof @  13.7.2009,  16:42 Найти цитируемый пост)
А так все работает? 

Нет :( Выделяет только Каракол четыре раза. :(
PM MAIL   Вверх
enof
Дата 13.7.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 35



хм, текст в какой кодировке?
PM MAIL ICQ Skype   Вверх
KgCoder
Дата 13.7.2009, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Utf-8... а у вас работает?

Добавлено @ 18:56
Ваш вариант работает, оказывается файл сохранил как ansi. Но вот на инглише не работает:
Код

<?php
$text = 'Karakol river, goes near Karakol Peak and enters Karakol city. Once more Karakol.';
$tags = array(
  5 => 'Karakol river',
  7 => 'Karakol Peak',
  21 => 'Karakol city',
  1=>'Karakol',
);
foreach($tags as $id=>$tag)
    $text = preg_replace('#(?!<a[^>]+>)('.preg_quote($tag, '#').')(?!</a>)#iu', '<a href="tag/TAG['.$id.']">$1</a>', $text);
echo $text;


Добавлено @ 18:57
Вернее выделяет только Karakol четыре раза и всё.

Добавлено @ 18:58
Вот что произходит на инглише:
Код

<a href="tag/TAG[5]"><a href="tag/TAG[1]">Karakol</a> river</a>, 
goes near <a href="tag/TAG[7]"><a href="tag/TAG[1]">Karakol</a> Peak</a> 
and enters <a href="tag/TAG[21]"><a href="tag/TAG[1]">Karakol</a> city</a>. 
Once more <a href="tag/TAG[1]">Karakol</a>.


Это сообщение отредактировал(а) KgCoder - 13.7.2009, 19:00
PM MAIL   Вверх
enof
Дата 13.7.2009, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 1
Всего: 35



сорри, мой косяк, опять с проверками запутался. Сейчас подумаю.
PM MAIL ICQ Skype   Вверх
KgCoder
Дата 14.7.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Попробовал сам, через условия, но текст вообще не заменяется. :( Посмотрел сторонние модули, там используют mb_string и вообще функций типа preg не нашел. Код очень объемный там, и без комментов. В общем засада. :( Буду еще копать... надеюсь до завтра доживу smile
PM MAIL   Вверх
KgCoder
Дата 14.7.2009, 13:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Решил вопрос. Всем спасибо.
PM MAIL   Вверх
KgCoder
Дата 15.7.2009, 06:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Мне сказали, что можно это сделать через strpos и substr, при этом снизится нагрузка на сервер. Это правда?
PM MAIL   Вверх
KgCoder
Дата 16.7.2009, 06:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 6.3.2008
Где: KGstan

Репутация: нет
Всего: нет



Что тут все такие пассивные стали?  smile В общем написал через strpos и substr получилось даже лучше по функциональности. Всем спасибо.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Тексты | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.