Подскажите регулярку

seomr

Client
Регистрация
31.05.2011
Сообщения
103
Благодарностей
5
Баллы
18
Здравствуйте, уважаемые форумчане. Помогите составить регулярное выражение: при наличии определенного слова в тексте, вывести предложение, в котором оно содержится.

Заранее благодарен.
 

Gang

Client
Регистрация
04.04.2010
Сообщения
577
Благодарностей
313
Баллы
63
Можно разбить текст по предложениям в список (регулярка от точки до точки как вариант). Дальше загнать список в цикл и каждую строчку списка проверять на наличине нужного слова регуляркой. Если нашли, возвращаем данную строку в переменную для дальнейшего использования.

Первое что в голову пришло, нужно тестировать) Одной регуляркой такое сделать не смог бы)
 

seomr

Client
Регистрация
31.05.2011
Сообщения
103
Благодарностей
5
Баллы
18
Спасибо за предложение, но слишком долго. У меня десятки-сотни тысяч сайтов, которые нужно проверить, не могу предположить сколько будут проверяться все предложения на этих сайтах.
Скажите, а есть такой же пункт как в тестере регулярных выражений "Самое короткое совпадение", но чтобы оно работало в обе стороны. К примеру, я задал начало - точка. Конец - точка, посередине вбил ключевик. И чтобы выдавало самый короткий вариант?
В стандартном варианте оно выдаст все предложение до того, которое содержит мой ключ.
 

seomr

Client
Регистрация
31.05.2011
Сообщения
103
Благодарностей
5
Баллы
18
Пока нашел только корявый вариант с ограничением по количеству символов.
Примерно так:
Код:
(?<=\.\ )[А-Яа-я0-9\,\-\s\:]{1,100}здесь_ключевик[А-Яа-я0-9\,\-\s\:]{1,100}.*?\.
Но он учитывает только предложения, начиная со второго и я пока не добавил многих символов, которые могут встречаться в тексте + не учитывается, что могут быть html теги. Это, конечно, все можно подправить. Но ограничение по количеству символов совсем не нравится.
Поэтому, если у кого-то хоть какие-то мысли возникнут по поводу более оптимального варианта, с удовольствием выслушаю.
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
Пока нашел только корявый вариант с ограничением по количеству символов.
Примерно так:
Код:
(?<=\.\ )[А-Яа-я0-9\,\-\s\:]{1,100}здесь_ключевик[А-Яа-я0-9\,\-\s\:]{1,100}.*?\.
Но он учитывает только предложения, начиная со второго и я пока не добавил многих символов, которые могут встречаться в тексте + не учитывается, что могут быть html теги. Это, конечно, все можно подправить. Но ограничение по количеству символов совсем не нравится.
Поэтому, если у кого-то хоть какие-то мысли возникнут по поводу более оптимального варианта, с удовольствием выслушаю.
[^.!?]+?здесь_ключевик[^.!?]+
 
  • Спасибо
Реакции: seomr

seomr

Client
Регистрация
31.05.2011
Сообщения
103
Благодарностей
5
Баллы
18
to doc,
немного модифицировал регулярку, все работает. Но возникла иная проблема. Пару подобных регулярок и даже на get запросах все работает крайне медленно на 98% нагружая процессор (i5 2.5GHz). С другими регулярками за 5 лет такого не было, они вообще не грузили пк.
Как-то можно оптимизировать данный процесс?
 

doc

Client
Регистрация
30.03.2012
Сообщения
8 614
Благодарностей
4 602
Баллы
113
to doc,
немного модифицировал регулярку, все работает. Но возникла иная проблема. Пару подобных регулярок и даже на get запросах все работает крайне медленно на 98% нагружая процессор (i5 2.5GHz). С другими регулярками за 5 лет такого не было, они вообще не грузили пк.
Как-то можно оптимизировать данный процесс?
для начала происто искать ключевик. Если его нет, то нет смысла искать предложение по регулярке.
 
  • Спасибо
Реакции: seomr

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 450
Благодарностей
1 880
Баллы
113
to doc,
немного модифицировал регулярку, все работает. Но возникла иная проблема. Пару подобных регулярок и даже на get запросах все работает крайне медленно на 98% нагружая процессор (i5 2.5GHz). С другими регулярками за 5 лет такого не было, они вообще не грузили пк.
Как-то можно оптимизировать данный процесс?
Код:
(?<=[\.\?!])[^\.\?!]+?здесь_ключевик.*?[\.!\?]
Так по идее должно быстрее работать
 
  • Спасибо
Реакции: seomr и doc

seomr

Client
Регистрация
31.05.2011
Сообщения
103
Благодарностей
5
Баллы
18
Спасибо, попробую.
А кто-то сталкивался с обработкой действительно огромных массивов данных? Существуют ли более быстрые методы получения нужной инфы, чем использование регулярное?
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)