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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод первого предложения, в котором есть поисковое слово 
V
    Опции темы
Guedda
Дата 7.9.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Добрый день, уважаемые. Столкнулся со следующей проблемой. 
Я делаю поиск по базе, и мне возвращается результат. Так вот мне необходимо отфильтровать результат так, чтобы выводилость ТОЛЬКО первое предложение, в котором есть эта поисковая строка.
Например:  
Текст: Мама мыла раму. Рама была холодная, но очень мокрая. Не хочу я, чтобы рама мыла меня.
Поисковой запрос: рама
Результат: Рама была холодная, но очень мокрая.
Как это реализовать? Мозг застопорился, не может найти решение. Может Вы что подскажете?

Заранее благодарен за ответы.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
enoff
Дата 7.9.2010, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если данные уже взяты из базы, то
Код

$str = "Мама мыла раму. Рама была холодная, но очень мокрая. Не хочу я, чтобы рама мыла меня.";
$search = "рама";
$pattern = "#[^.]*" . $search . "[^.]*\.#ui";
preg_match($pattern, $str, $out);
var_dump($out);

И возможный пробел убрать в начале. Ну или чуть изменить рв.

Это сообщение отредактировал(а) enoff - 7.9.2010, 14:36
PM MAIL ICQ Skype GTalk   Вверх
CruorVult
Дата 7.9.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



+ Кроме точки еще может быть "!" и "?"

Код

$reg = "#[^.?!]*".$search."[^.?!]*#i";


Это сообщение отредактировал(а) CruorVult - 7.9.2010, 15:05
PM MAIL Skype   Вверх
enoff
Дата 7.9.2010, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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

Добавлено через 16 секунд
Не успел...
PM MAIL ICQ Skype GTalk   Вверх
enoff
Дата 7.9.2010, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



CruorVult, метасимволы в символьном классе не нужно экранировать.
PM MAIL ICQ Skype GTalk   Вверх
CruorVult
Дата 7.9.2010, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



enoff, буду знать smile 
PM MAIL Skype   Вверх
ksnk
Дата 7.9.2010, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



предложение заканчивается точкой(восклицательным, вопросительным, многоточием) за которым следует пробел. Инициалы терять не хочется...


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


Опытный
**


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

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



ksnk, между И. О. пробел не ставится?
PM MAIL ICQ Skype GTalk   Вверх
ksnk
Дата 7.9.2010, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Хм... вродк как действительно, по правилам инициалы пишутся с разбивкой через пробел, так что все равно потеряются. Хотя можно не считать концом строки слово, состоящее из одной буквы с точкой на конце ;)

Правда сочинить такую регулярку я пока что-то не смог :( 


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


Опытный
**


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

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



Код

<?php
$str = "Предложение без того, что сейчас нельзя называть." . 
"Это искомое слово, мои инициалы И. А., а дальше текст. ". 
"Следующее предложение искомое слово текст.";
preg_match("#[^.!?]*искомое.*(?<=[^А-Я])[.!?]+#Uu", $str, $out);
var_dump($out);
?>

Только все равно немного не верно, "ААА!" в конце предложения будет считаться инициалом.
Хотя предложение на заглавную букву наврятли будет заканчиваться...

Это сообщение отредактировал(а) enoff - 7.9.2010, 22:22
PM MAIL ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




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


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

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