Разбивка в определенном месте регулярного выражения

qru

Новичок
Разбивка в определенном месте регулярного выражения

Добрый день..

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

Если использовать к примеру $text1mas = explode (". ", $text1); то строки с инициалами и т.п. разбиваются не верно (ведь точка там - не конец предложения).

Я пытался использовать такое вот регулярное выражение (php не русский у меня на хосте):
'[АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]+(\.)( )[АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯA-Z][АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]*'
Но сколько функций разных не перепробывал (типа preg_match, split и т.п) - никак не получается сделать чтобы разбивка происходила в определенном месте регулярного выражения (там где пробел)...

При этом ничего страшного если в некоторых ячейках массива попадет не одно а 2-3 предложения.

Буду признателен за помощь.. Возможно есть какая-то функция или комбинация функций для осуществления пободного действия.
Спасибо.
 

StUV

Rotaredom
qru
определись для начала с условиями определяющими "конец предложения"
 

qru

Новичок
Я ищу по форуму похожий вопрос.. Но безуспешно..

Конец предложения определяется выражением '[АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]+(\.)( )' но если после него идет слово не с заглавной буквы то конец неверно определен, о чем собственно и свидетельствует вторая половина р.в. приведенного в первом посте.. А как искать сразу верно и разбивать текст по пробелу но с учетом р.в. никак не догоню..
 

StUV

Rotaredom
qru
ты немного не понял вопрос
если бы твоя регулярка определяла "конец предложения" - она бы работала

напиши в несколько пунктов _словами_ - какие признаки конца предложения ты знаешь + исключения
 

qru

Новичок
Автор оригинала: StUV
qru
ты немного не понял вопрос
если бы твоя регулярка определяла "конец предложения" - она бы работала

напиши в несколько пунктов _словами_ - какие признаки конца предложения ты знаешь + исключения
Хм.. Ну так тут дело не только в конце предложения но и в начале следующего.. Мне столь важно чтобы все предложения определились, главное чтобы был минимум ошибочных разбиений..

Конец предложения это "точка (а так же !?) + пробел"
А исключения это когда после этого пробела следует слово с маленькой буквы или точка встречается менее чем через 2 слова..
 

Baranov_Dron

Новичок
http://www.nncron.ru/help/RU/add_info/regexp.htm
зачем писать [АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]
если можно написать [a-zа-я] и поставить параметр i
<Конец предложения это "точка (а так же !?) + пробел"
по ссылке выше ищи оператор "или" в регулярном предложение и пиши!
 

qru

Новичок
Автор оригинала: Baranov_Dron
http://www.nncron.ru/help/RU/add_info/regexp.htm
зачем писать [АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]
если можно написать [a-zа-я] и поставить параметр i
<Конец предложения это "точка (а так же !?) + пробел"
по ссылке выше ищи оператор "или" в регулярном предложение и пиши!
Спасиб за ссылку.
[a-zа-я] - не хочет работать на моем хостинге американском.. Там как-то надо еще кодировку прописывать.. Чтобы проблем не возникало проще как я выше по-моему написать..

Вообще вот одну темку 2003 года нашел.. http://phpclub.ru/talk/showthread.php?s=&threadid=28459&highlight=%E8%ED%E8%F6%E8%E0%EB%FB но там так окончательного решения проблемы и нет.. В общем сейчас повожусь с этим - если получится сделать - отпишусь.

Спасибо всем за советы.

P.S. Вроде понял что нужно использовать Расширенный оператор "?=".

-~{}~ 02.05.08 21:28:

Как и обещал выкладываю выражение для разивки на предложения без ошибок, но не в 100% случаев. Для меня оптимальное.

preg_split("/(?<=[АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]{3}[.?!])\s+(?=[АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯA-Z][АБВГДЕЁЖЗИЙКЛМНОРПСТУФХЦЧШЩЪЬЫЭЮЯабвгдеёжзийклмнорпстуфхцчшщъьыэюяA-Za-z]+)/", $qrutext1);

ну или
preg_split("/(?<=[А-Яа-яA-Za-z]{3}[.?!])\s+(?=[А-ЯA-Z][А-Яа-яA-Za-z]+)/", $qrutext1);
 
Сверху