Парсинг текста по искомым ключам (PHP)
Гарри Поттер был блестящим игроком в квиддич. Уже на первом курсе он играл за свой факультет как ловец, став самым молодым ловцом за последние 100 лет. В общей сложности он поймал снитч и принёс победу своей команде в 7 из 9 игр. В двух оставшихся он проиграл только потому, что потерял сознание: в одном случае из-за появления дементоров, в другом — из-за того, что один из игроков его команды неумышленно ударил Гарри бладжером по голове и пробил ему череп. Его способности к полётам на метле пригодились не только в квиддиче: в первой книге Гарри поймал птицу-ключ, в четвёртой победил дракона в Турнире Трёх Волшебников, в седьмой спас Драко Малфоя от Адского Пламени.
Есть массив:
$search_keys=array("ловец","другом","тоГо","гарри","поТ","квиддиче","ников");
Требуется вернуть текст с выделенными словами html-тегом <strong></strong>, не зависимо от регистра.
хотя я не думаю что это самый грамотный вариант...
я думаю что хорошим вариантом будет preg_replace
но я пока в регулярных выражениях не очень...
$replace = '<strong>$0</strong>';
$result = preg_replace($search_keys, $replace, $text);
echo $result;
$replace = '<strong>$0</strong>';
$result = preg_replace($search_keys, $replace, $text);
echo $result;
Полнейшая порнография. Зачем тут регулярки если можно обойтись строковыми функциями?
Пример нормальный:
$text = 'Вася прыгнул со скалы, а внизу был петя. "ДИМА!" - закричала Маша';
$len = count($words);
for($i = 0; $i<$len; $i++) $text = str_ireplace($words[$i], '<strong>'.$words[$i].'</strong>', $text);
echo $text;
$replace = '<strong>$0</strong>';
$result = preg_replace($search_keys, $replace, $text);
echo $result;
Результат не совсем тот который ожидается:
Гарри Поттер был блестящим игроком в квиддич. Уже на первом курсе он играл за свой факультет как ловец, став самым молодым ловцом за последние 100 лет. В общей сложности он поймал снитч и принёс победу своей команде в 7 из 9 игр. В двух оставшихся он проиграл только потому, что потерял сознание: в одном случае из-за появления дементоров, в другом — из-за того, что один из игроков его команды неумышленно ударил Гарри бладжером по голове и пробил ему череп. Его способности к полётам на метле пригодились не только в квиддиче: в первой книге Гарри поймал птицу-ключ, в четвёртой победил дракона в Турнире Трёх Волшебников, в седьмой спас Драко Малфоя от Адского Пламени.
Ожидается что будут выбраны только слова, а не и части слов
Пример нормальный:
$text = 'Вася прыгнул со скалы, а внизу был петя. "ДИМА!" - закричала Маша';
$len = count($words);
for($i = 0; $i<$len; $i++) $text = str_ireplace($words[$i], '<strong>'.$words[$i].'</strong>', $text);
echo $text;
К вашему примеру такое же замечание!
Плюс в вашем примере не соблюдается регистр оригинала.
И еще не знаю как на счет скорости при больших объемах текста.
Оригинал:
$words = array('вася', 'петя', 'дима', 'маша');
$text = 'Вася прыгнул со скалы, а внизу был петя. "ДИМА!" - закричала Маша';
Результат:
вася прыгнул со скалы, а внизу был петя. "дима!" - закричала маша
Оригинал:
$words = array('ася', 'петя', 'дима', 'маша');
$text = 'Вася прыгнул со скалы, а внизу был петя. "ДИМА!" - закричала Маша';
Результат:
Вася прыгнул со скалы, а внизу был петя. "дима!" - закричала маша
Правда дам еще есть морфологический разбор слова... но это я уже предусмотрел... осталось с отображением... решить вопрос!
Еще есть функции strstr. Никто за вас вашу работу бесплатно делать не будет.
Еще есть функции strstr. Никто за вас вашу работу бесплатно делать не будет.
не надо так дерзко отвечать... это не место...
если у вас больше вариантов решения нет... то и смысла писать нет...
Я поднял эту тему... но полезной она не только для меня может быть...
так что если интересно... давайте копать вместе...
$result = preg_replace("/".$keyOut."(".implode("|",$this->search_keys).")".$keyOut."/i","\\1<strong>\\2</strong>\\3",$text);
я не озвучивал... в надежде что кто-то предложит лучше вариант...
возможно... здесь что-то не правильно...
Объясню подробнее для тех, кому лень думать.
Берете строковую функцию stripos
http://www.php.net/manual/en/function.stripos.php
и по циклу прогоняете ее по всем словам в массиве определяя позицию в тексте с последующей заменой.
P.S. Вам не надоело писать вместо точки в конце предложения многоточия?
Объясню подробнее для тех, кому лень думать.
Берете строковую функцию stripos
http://www.php.net/manual/en/function.stripos.php
и по циклу прогоняете ее по всем словам в массиве определяя позицию в тексте с последующей заменой.
P.S. Вам не надоело писать вместо точки в конце предложения многоточия?
вы повторяетесь...
вам вообще известны регулярные выражения?
тот код который вы указали можно вместить в одну строку...
я вас прошу если нет больше вариантов... не позорьтесь...
и если можно по теме...
То, что вы юзаете для такой элементарщины регулярные выражения - образцовый показатель быдлокодерства. Меньшее кол-во строк не означает качество кода.
Регулярные выражения этот человек знает и не использует потому, что они здесь абсолютно не нужны. Хотя бы из-за того, что их выполнение более ресурсоемко.
А направление он сказал верное. Использовать указанную им функцию и всё.
вам вообще известны регулярные выражения?
тот код который вы указали можно вместить в одну строку...
я вас прошу если нет больше вариантов... не позорьтесь...
и если можно по теме...
Именно потому что я хорошо знаю регулярные выражения, я пишу вам решение средствами строковых функций.
Но раз вы просите более вам не помогать - удачи.
То, что вы юзаете для такой элементарщины регулярные выражения - образцовый показатель быдлокодерства. Меньшее кол-во строк не означает качество кода.
Регулярные выражения этот человек знает и не использует потому, что они здесь абсолютно не нужны. Хотя бы из-за того, что их выполнение более ресурсоемко.
А направление он сказал верное. Использовать указанную им функцию и всё.
я же просил... по теме... нет ничего нового? зачем повторяться?
зачем нужен это флуд ребята?
нет других вариантов... молодцы... все... дайте другим высказаться...
а на счет порядков соображений... указанный пример все показал...
была поставленна четкая задача... решение на которую было ошибочно... а мой вариант работает... и именно так как надо... может немного коряво... я же писал... что еще не до конца шарю в регулярных выражениях...
Но раз вы просите более вам не помогать - удачи.
так дайте пример... пусть люди которые будут читать этот топик сами выберут.... зачем столько флуда?
А вы уверены что не шарите только в этом?
[QUOTE=GoldMan]так дайте пример...[/QUOTE]
Ну поскольку вы не шарите, как сказали только в регулярках, а в остальном вы, видимо, профессионал, то написать самому для вас не составит труда. Алгоритм и нужные функции я уже выше указал - подсветит как надо. Лично я писать вам более ничего не намерен.
тоже рабочий... я понял почему на хостинге моего провайдера не работает... эта регулярка... почему-то обработчик не принемает операции с регистром... т.е. у него всеравно есть зависимость от регистра... остается узнать почему это происходит...
тоже рабочий... я понял почему на хостинге моего провайдера не работает... эта регулярка... почему-то обработчик не принемает операции с регистром... т.е. у него всеравно есть зависимость от регистра... остается узнать почему это происходит...
Потому что это eregi - устаревшие функции.
вы нормальный? адекватный человек? просил же по теме... зачем разводить этот флуд?
и в первом и во втором случае... с регулярками... все работает... на виртуальном хостинге... у провайдера... PHP той же версии.... что и у меня на хосте....
а str_replace новая функция?
Здесь нет необходимости использовать регулярки - они медленные и сложные в обращении. Здесь все решается строковыми функциями - они быстрые, простые и наглядные.
Какие именно и как - описано мною выше.
Здесь нет необходимости использовать регулярки - они медленные и сложные в обращении. Здесь все решается строковыми функциями - они быстрые, простые и наглядные.
Какие именно и как - описано мною выше.
суть ваших мыслей ясна...
Оскорбления, которые вы шлете мне в приват, не помогут вам решить вашу проблему. За сим откланяюсь. Жалобу на ваши действия я уже написал.
Удачи.
суть ваших мыслей ясна...
если все ваши сообщения Сообщений: 2,226 с таким же смыслом были написанны... как... в этом топике... то... мне жаль вас...
суть ваших мыслей ясна...
если все ваши сообщения Сообщений: 2,226 с таким же смыслом были написанны... как... в этом топике... то... мне жаль вас...
А мне вас нет. Потому как сутки препирательств с ЗАВЕДОМО более опытными людьми так и не принесли вам решения вашей проблемы. И вместо того чтобы требовать от людей, чтобы они сделали за вас ВАШУ работу, вы бы попробовали лучше понять и разобраться в том, что вам говорят.
Мои сообщения вы можете прочитать - такая функция доступна на этом форуме.
Тут даже комментарии излишни. Не стройте из себя героя на форуме, если даже в мануале не можете глянуть, в каких версиях уже была эта функция.
Отвечу - старая функция.
низкий поклон!
Все работает...
Давно пора карать.