Как разделить текст на предложения?

lantastic

Новичок
Как разделить текст на предложения?

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

Написал следующий код:

PHP:
$text  = 'Use documentation! Then plan and set up a site. Begin to create pages.';
$items =  preg_split("/[.?!] /", $text);
echo '<pre>';
print_r($items);
echo '</pre>';
Вывод:

Код:
Array
(
    [0] => Use documentation
    [1] => Then plan and set up a site
    [2] => Begin to create pages.
)
Все хорошо, но мы потеряли точки, вопросы и восклицательные знаки в конце предложений. Как можно это исправить?
 

SelenIT

IT-лунатик :)
Как вариант - использовать ретроспективные проверки. Например, так: /(?<=[.?!])\s+/
 

lantastic

Новичок
Спасибо ребята, щас я только в ваших ответах поразбираюсь.

Насчет PREG_SPLIT_DELIM_CAPTURE я перепробовал кучу комбинаций, знаки препинания в отдельных элементах массива сохраняются. Так что не катит.

Ретроспективные проверки? А что это такое, можно поподробней? Что за регулярное выражение такое: /(?<=[.?!])\s+/

Вариант от SiMM прекрасно работает! Спасибо!
 

SelenIT

IT-лунатик :)
lantastic
http://www.php.net/manual/ru/reference.pcre.pattern.syntax.php - там это называется " Утверждения касательно предшествующего текста". А мое выражение означает "как минимум один пробельный символ (сам пробел, табуляция либо перевод строки), перед которым идет один из знаков [.!?]". При этом возвращается только пробельный(-е) символ(-ы), а знаки препинания не включаются в найденный фрагмент и при preg_split-е остаются в тексте.
 

lantastic

Новичок
Спасибо, SelenIT!

Разбираюсь потихонечку в твоей ссылке. Мда, регулярные выражения это сила, мне их копать и копать еще. Сейчас попробую твой вариант реализовать в preg_split() для интереса.

-~{}~ 19.03.05 17:25:

Автор оригинала: lantastic
Спасибо, SelenIT!

Разбираюсь потихонечку в твоей ссылке. Мда, регулярные выражения это сила, мне их копать и копать еще. Сейчас попробую твой вариант реализовать в preg_split() для интереса.
Все прекрасно работает! Чудеса ;)
 
Сверху