Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Парсинг текста по искомым ключам (PHP)

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Есть текст:
Гарри Поттер был блестящим игроком в квиддич. Уже на первом курсе он играл за свой факультет как ловец, став самым молодым ловцом за последние 100 лет. В общей сложности он поймал снитч и принёс победу своей команде в 7 из 9 игр. В двух оставшихся он проиграл только потому, что потерял сознание: в одном случае из-за появления дементоров, в другом — из-за того, что один из игроков его команды неумышленно ударил Гарри бладжером по голове и пробил ему череп. Его способности к полётам на метле пригодились не только в квиддиче: в первой книге Гарри поймал птицу-ключ, в четвёртой победил дракона в Турнире Трёх Волшебников, в седьмой спас Драко Малфоя от Адского Пламени.

Есть массив:
$search_keys=array("ловец","другом","тоГо","гарри","поТ","квиддиче","ников");

Требуется вернуть текст с выделенными словами html-тегом <strong></strong>, не зависимо от регистра.
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
str_replace??
3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
можете дать пример с str_replace?
хотя я не думаю что это самый грамотный вариант...
я думаю что хорошим вариантом будет preg_replace
но я пока в регулярных выражениях не очень...
61K
21 мая 2010 года
qatap
2 / / 21.05.2010
 
Код:
$search_keys = array('#ловец#i', '#другом#i', '#тоГо#i', '#гарри#i', '#поТ#i', '#квиддиче#i', '#ников#i');
$replace = '<strong>$0</strong>';
$result = preg_replace($search_keys, $replace, $text);
echo $result;
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: qatap
 
Код:
$search_keys = array('#ловец#i', '#другом#i', '#тоГо#i', '#гарри#i', '#поТ#i', '#квиддиче#i', '#ников#i');
$replace = '<strong>$0</strong>';
$result = preg_replace($search_keys, $replace, $text);
echo $result;



Полнейшая порнография. Зачем тут регулярки если можно обойтись строковыми функциями?

Пример нормальный:

 
Код:
$words = array('вася', 'петя', 'дима', 'маша');
$text = 'Вася прыгнул со скалы, а внизу был петя. "ДИМА!" - закричала Маша';

$len = count($words);
for($i = 0; $i<$len; $i++) $text = str_ireplace($words[$i], '<strong>'.$words[$i].'</strong>', $text);

echo $text;
3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: qatap
 
Код:
$search_keys = array('#ловец#i', '#другом#i', '#тоГо#i', '#гарри#i', '#поТ#i', '#квиддиче#i', '#ников#i');
$replace = '<strong>$0</strong>';
$result = preg_replace($search_keys, $replace, $text);
echo $result;


Результат не совсем тот который ожидается:
Гарри Поттер был блестящим игроком в квиддич. Уже на первом курсе он играл за свой факультет как ловец, став самым молодым ловцом за последние 100 лет. В общей сложности он поймал снитч и принёс победу своей команде в 7 из 9 игр. В двух оставшихся он проиграл только потому, что потерял сознание: в одном случае из-за появления дементоров, в другом — из-за того, что один из игроков его команды неумышленно ударил Гарри бладжером по голове и пробил ему череп. Его способности к полётам на метле пригодились не только в квиддиче: в первой книге Гарри поймал птицу-ключ, в четвёртой победил дракона в Турнире Трёх Волшебников, в седьмой спас Драко Малфоя от Адского Пламени.


Ожидается что будут выбраны только слова, а не и части слов

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
Полнейшая порнография. Зачем тут регулярки если можно обойтись строковыми функциями?

Пример нормальный:
 
Код:
$words = array('вася', 'петя', 'дима', 'маша');
$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 = 'Вася прыгнул со скалы, а внизу был петя. "ДИМА!" - закричала Маша';
Результат:
Вася прыгнул со скалы, а внизу был петя. "дима!" - закричала маша

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Этот пример будет полезен для тех кто хочет сделать поиск у себя на сайте и потом есть необходимость отобразить результаты поиска. Приблизительно как в яндексе...
Правда дам еще есть морфологический разбор слова... но это я уже предусмотрел... осталось с отображением... решить вопрос!
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Вы хотите чтобы мы решили вашу проблему написав код? Вам дали направление - копайте.

Еще есть функции strstr. Никто за вас вашу работу бесплатно делать не будет.
3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
Вы хотите чтобы мы решили вашу проблему написав код? Вам дали направление - копайте.

Еще есть функции strstr. Никто за вас вашу работу бесплатно делать не будет.


не надо так дерзко отвечать... это не место...
если у вас больше вариантов решения нет... то и смысла писать нет...
Я поднял эту тему... но полезной она не только для меня может быть...
так что если интересно... давайте копать вместе...

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
у меня есть решение... но оно почему-то не работает на хостинге провайдера... на виртуалке все ОК...
 
Код:
$keyOut="([.?,!()#\":;|&\s\\\[\]\{\}])";
$result = preg_replace("/".$keyOut."(".implode("|",$this->search_keys).")".$keyOut."/i","\\1<strong>\\2</strong>\\3",$text);

я не озвучивал... в надежде что кто-то предложит лучше вариант...
возможно... здесь что-то не правильно...
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Я вам уже сказал куда копать
Объясню подробнее для тех, кому лень думать.
Берете строковую функцию stripos
http://www.php.net/manual/en/function.stripos.php
и по циклу прогоняете ее по всем словам в массиве определяя позицию в тексте с последующей заменой.

P.S. Вам не надоело писать вместо точки в конце предложения многоточия?
3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
Я вам уже сказал куда копать
Объясню подробнее для тех, кому лень думать.
Берете строковую функцию stripos
http://www.php.net/manual/en/function.stripos.php
и по циклу прогоняете ее по всем словам в массиве определяя позицию в тексте с последующей заменой.

P.S. Вам не надоело писать вместо точки в конце предложения многоточия?



вы повторяетесь...
вам вообще известны регулярные выражения?
тот код который вы указали можно вместить в одну строку...

я вас прошу если нет больше вариантов... не позорьтесь...

и если можно по теме...

244
21 мая 2010 года
UAS
2.0K / / 19.07.2006
GoldMan, и вы это говорите человеку, который соображает на порядок лучше вас??
То, что вы юзаете для такой элементарщины регулярные выражения - образцовый показатель быдлокодерства. Меньшее кол-во строк не означает качество кода.
Регулярные выражения этот человек знает и не использует потому, что они здесь абсолютно не нужны. Хотя бы из-за того, что их выполнение более ресурсоемко.

А направление он сказал верное. Использовать указанную им функцию и всё.
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: GoldMan
вы повторяетесь...
вам вообще известны регулярные выражения?
тот код который вы указали можно вместить в одну строку...

я вас прошу если нет больше вариантов... не позорьтесь...

и если можно по теме...



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

Но раз вы просите более вам не помогать - удачи.

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: UAS
GoldMan, и вы это говорите человеку, который соображает на порядок лучше вас??
То, что вы юзаете для такой элементарщины регулярные выражения - образцовый показатель быдлокодерства. Меньшее кол-во строк не означает качество кода.
Регулярные выражения этот человек знает и не использует потому, что они здесь абсолютно не нужны. Хотя бы из-за того, что их выполнение более ресурсоемко.

А направление он сказал верное. Использовать указанную им функцию и всё.


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

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
Именно потому что я хорошо знаю регулярные выражения, я пишу вам решение средствами строковых функций.

Но раз вы просите более вам не помогать - удачи.


так дайте пример... пусть люди которые будут читать этот топик сами выберут.... зачем столько флуда?

13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: GoldMan
что еще не до конца шарю в регулярных выражениях...


А вы уверены что не шарите только в этом?

[QUOTE=GoldMan]так дайте пример...[/QUOTE]
Ну поскольку вы не шарите, как сказали только в регулярках, а в остальном вы, видимо, профессионал, то написать самому для вас не составит труда. Алгоритм и нужные функции я уже выше указал - подсветит как надо. Лично я писать вам более ничего не намерен.

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
есть еще вариант:
 
Код:
$string=eregi_replace("([[:<:]]".implode("[[:>:]]|[[:<:]]",$this->search_keys)."[[:>:]])","<strong>\\1</strong>",$string);


тоже рабочий... я понял почему на хостинге моего провайдера не работает... эта регулярка... почему-то обработчик не принемает операции с регистром... т.е. у него всеравно есть зависимость от регистра... остается узнать почему это происходит...
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: GoldMan
есть еще вариант:
 
Код:
$string=eregi_replace("([[:<:]]".implode("[[:>:]]|[[:<:]]",$this->search_keys)."[[:>:]])","<strong>\\1</strong>",$string);


тоже рабочий... я понял почему на хостинге моего провайдера не работает... эта регулярка... почему-то обработчик не принемает операции с регистром... т.е. у него всеравно есть зависимость от регистра... остается узнать почему это происходит...



Потому что это eregi - устаревшие функции.

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
А вы уверены что не шарите только в этом?


вы нормальный? адекватный человек? просил же по теме... зачем разводить этот флуд?

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
Потому что это eregi - устаревшие функции.


и в первом и во втором случае... с регулярками... все работает... на виртуальном хостинге... у провайдера... PHP той же версии.... что и у меня на хосте....

а str_replace новая функция?

13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Еще раз для тех для, до кого с первого раза не доходит.

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

Какие именно и как - описано мною выше.
3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: RussianSpy
Еще раз для тех для, до кого с первого раза не доходит.

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

Какие именно и как - описано мною выше.


суть ваших мыслей ясна...

13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: GoldMan
суть ваших мыслей ясна...



Оскорбления, которые вы шлете мне в приват, не помогут вам решить вашу проблему. За сим откланяюсь. Жалобу на ваши действия я уже написал.
Удачи.

3.0K
21 мая 2010 года
GoldMan
104 / / 15.08.2005
я не люблю повторяться... но... в вашем случае... нечего больше сказать...
суть ваших мыслей ясна...

если все ваши сообщения Сообщений: 2,226 с таким же смыслом были написанны... как... в этом топике... то... мне жаль вас...
13
21 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: GoldMan
я не люблю повторяться... но... в вашем случае... нечего больше сказать...
суть ваших мыслей ясна...

если все ваши сообщения Сообщений: 2,226 с таким же смыслом были написанны... как... в этом топике... то... мне жаль вас...



А мне вас нет. Потому как сутки препирательств с ЗАВЕДОМО более опытными людьми так и не принесли вам решения вашей проблемы. И вместо того чтобы требовать от людей, чтобы они сделали за вас ВАШУ работу, вы бы попробовали лучше понять и разобраться в том, что вам говорят.

Мои сообщения вы можете прочитать - такая функция доступна на этом форуме.

244
21 мая 2010 года
UAS
2.0K / / 19.07.2006
Цитата: GoldMan
а str_replace новая функция?


Тут даже комментарии излишни. Не стройте из себя героя на форуме, если даже в мануале не можете глянуть, в каких версиях уже была эта функция.

Отвечу - старая функция.

3.0K
22 мая 2010 года
GoldMan
104 / / 15.08.2005
неодекват полнейший... ладно... ребята... флудите... опытные вы наши... удачи... :)
50K
22 мая 2010 года
moveax
10 / / 02.09.2009
 
Код:
$search_keys = array('#\bловец\b#i', '#\bдругом\b#i', '#\bтоГо\b#i', '#\bгарри\b#i', '#\bпоТ\b#i', '#\bквиддиче\b#i', '#\bников\b#i');
3.0K
23 мая 2010 года
GoldMan
104 / / 15.08.2005
Цитата: moveax
 
Код:
$search_keys = array('#\bловец\b#i', '#\bдругом\b#i', '#\bтоГо\b#i', '#\bгарри\b#i', '#\bпоТ\b#i', '#\bквиддиче\b#i', '#\bников\b#i');


низкий поклон!
Все работает...

239
24 мая 2010 года
Dolonet
1.7K / / 20.05.2000
Ребята, давайте без острот и оскорблений - высказывайтесь только по сути. Иначе буду безудержно карать.
13
24 мая 2010 года
RussianSpy
3.0K / / 04.07.2006
Цитата: Dolonet
Ребята, давайте без острот и оскорблений - высказывайтесь только по сути. Иначе буду безудержно карать.



Давно пора карать.

61K
31 мая 2010 года
skryisli
1 / / 27.05.2010
Сложность возникла именно в сохранении регистра источника?
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог