[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: рег.выражение для разбивки текста на предложения
asteroth
Доброго времени суток!

Есть текст, который необходимо разбить на предложения с помощью функции preg_split()

Поскольку в тексте часто встречаются точка в дробном числе(например, 5.567) и между буквами(например, т.е., т.п.), составил такое рег выражение:

$pattern = "~([\.?!;])+(?![\w\.\w^\d\.\d)~";  


Такое рег.выражние работает отлично, но есть загвоздка... практически всегда после сокращения "т.е." предложение не заканчивается, получается нужно "т.е." пропускать и искать точку(или воскл.знак, знак вопроса) дальше. По этому свое рег.выражение изменил так:

$pattern = "~([\.?!;])+(?![\w\.\w^\d\.\d^т\.е\.)~";


по такому выражению функция не правильно разбивает текст.

Подскажите что сделал неправльно, или может возможно по-другому переписать рег.выражение?
Placido
Навскидку что-то вроде
'/(?<=[.?!;])(?=\s*[A-ZА-ЯЁ])/'

Но 100% правильно тоже работать не будет (например, не сработает, если предложение начинается с цифры).
asteroth
Цитата (Placido @ 14.02.2013 - 01:46)
Навскидку что-то вроде
'/(?<=[.?!;])(?=\s*[A-ZА-ЯЁ])/'

Но 100% правильно тоже работать не будет (например, не сработает, если предложение начинается с цифры).

Спасибо за ответ. Попробую обязательно.
Zzepish
Placido
Объясни это плз: ?<= , ?=
Placido
Гугли ретроспективные и опережающие проверки, просмотр вперед/назад, lookahead/lookbehind assertions. Например, здесь.
В данном выражении использовал ретроспективную и опережающую проверки, так как они являются утверждениями нулевой ширины (не захватывают найденные подстроки), чтобы результат поиска оставался в строках после разбивки функцией preg_split.
Zzepish
Placido
благодарю!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.