RegEx исключает академическое название

Я хочу, чтобы строка абзаца разделена на массив предложений. Конечно, я использую регулярное выражение с символьной точкой (.), Чтобы разделить абзац на предложения. Проблема заключается в сокращении академического названия в предложениях, каждая аббревиатура использует точку (.). Таким образом, мое регулярное выражение полностью ошибочно разделяет абзац.

Вот пример параграфа:

Между тем ректор Богорского сельскохозяйственного университета, профессор д-р Херри Сухардианто, в своих замечаниях просил, чтобы аспиранты продолжали учиться и вовремя завершали учебу. В этой общей аудитории присутствовали заместитель декана Высшей школы богорского сельскохозяйственного университета д-р Деди Джусади, секретарь Высшей школы докторантуры сельскохозяйственного университета Богор, профессор. Marimin.

Только используя точку (.) Как регулярное выражение, я получаю:

Array ( [0] => Meanwhile Rector of Bogor Agricultural University, Prof [1] => Dr [2] => Herry Suhardiyanto, in his remarks requested that the graduate students should keep on studying and will finalize their studies on time [3] => ... ) 

И это на самом деле я хотел:

 Array ( [0] => Meanwhile Rector of Bogor Agricultural University, Prof. Dr. Herry Suhardiyanto, in his remarks requested that the graduate students should keep on studying and will finalize their studies on time [1] => Present in that general audience were the Deputy Dean of the Graduate School of Bogor Agricultural University, Dr.Dedi Jusadi, Secretary of the Graduate School for Doctoral Program of Bogor Agricultural University, Prof.Dr. Marimin ) 

Вы можете использовать Negative Lookbehinds:

((?<!Prof)(?<!Dr)(?<!Mr)(?<!Mrs)(?<!Ms))\. при необходимости добавить больше

Разъяснение демо: http://regex101.com/r/xQ3xF9

И код может выглядеть так:

 $text="Meanwhile Rector of Bogor Agricultural University, Prof. Dr. Herry Suhardiyanto, in his remarks about Mr. John requested that the graduate students should keep on studying and will finalize their studies on time. Present in that general audience were Mrs. Peterson of the Graduate School of Bogor Agricultural University, Dr.Dedi Jusadi, Secretary of the Graduate School for Doctoral Program of Bogor Agricultural University, Prof.Dr. Marimin."; $titles=array('(?<!Prof)', '(?<!Dr)', '(?<!Mr)', '(?<!Mrs)', '(?<!Ms)'); $sentences=preg_split('/('.implode('',$titles).')\./',$text); print_r($sentences); 

Кажется, это работает, но это новая функция PHP и строго RegEx –

 $begin = array( 0=>'Meanwhile in geography,', 1=>'Dr', 2=>'Henry Suhardiyanto, in his remarks, stated that ', 3=>'Dr', 4=>'Prof', 5=>'Jedi Dusadi was another ', 6=>'Prof'); $exclusions = array("Dr", "Prof", "Mr", "Mrs"); foreach ($begin as $pos => $sentence) { if (in_array($sentence, $exclusions)) { $begin[$pos+1] = $sentence . ". " . $begin[$pos+1]; unset($begin[$pos]); array_values($begin); } } с $begin = array( 0=>'Meanwhile in geography,', 1=>'Dr', 2=>'Henry Suhardiyanto, in his remarks, stated that ', 3=>'Dr', 4=>'Prof', 5=>'Jedi Dusadi was another ', 6=>'Prof'); $exclusions = array("Dr", "Prof", "Mr", "Mrs"); foreach ($begin as $pos => $sentence) { if (in_array($sentence, $exclusions)) { $begin[$pos+1] = $sentence . ". " . $begin[$pos+1]; unset($begin[$pos]); array_values($begin); } }