<?php
$re = '/# Split sentences on whitespace between them.
(?<= # Begin positive lookbehind.
[.!?] # Either an end of sentence punct,
| [.!?][\'"] # or end of sentence punct and quote.
) # End positive lookbehind.
(?<! # Begin negative lookbehind.
Mr\. # Skip either "Mr."
| Mrs\. # or "Mrs.",
| Ms\. # or "Ms.",
| Jr\. # or "Jr.",
| Dr\. # or "Dr.",
| Prof\. # or "Prof.",
| Sr\. # or "Sr.",
| T\.V\.A\. # or "T.V.A.",
# or... (you get the idea).
) # End negative lookbehind.
(\h+|^$) # Split on whitespace between sentences\/empty lines.
/mix' ;
$text = <<<EOL
This is paragraph one. This is sentence one. Sentence two!
This is paragraph two. This is sentence three. Sentence four!
EOL ;
echo "\n Before: \n " . $text . "\n " ;
$sentences = preg_split ( $re , $text , - 1 , PREG_SPLIT_DELIM_CAPTURE
) ;
$sentences [ 2 ] = "" ; // remove 'sentence one'
// put text back together
echo "\n After: \n " . $text . "\n " ;
PD9waHAKCiRyZSA9ICcvIyBTcGxpdCBzZW50ZW5jZXMgb24gd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uCiAgICAoPzw9ICAgICAgICAgICAgICAgICMgQmVnaW4gcG9zaXRpdmUgbG9va2JlaGluZC4KICAgICAgWy4hP10gICAgICAgICAgICAgIyBFaXRoZXIgYW4gZW5kIG9mIHNlbnRlbmNlIHB1bmN0LAogICAgfCBbLiE/XVtcJyJdICAgICAgICAjIG9yIGVuZCBvZiBzZW50ZW5jZSBwdW5jdCBhbmQgcXVvdGUuCiAgICApICAgICAgICAgICAgICAgICAgICMgRW5kIHBvc2l0aXZlIGxvb2tiZWhpbmQuCiAgICAoPzwhICAgICAgICAgICAgICAgICMgQmVnaW4gbmVnYXRpdmUgbG9va2JlaGluZC4KICAgICAgTXJcLiAgICAgICAgICAgICAgIyBTa2lwIGVpdGhlciAiTXIuIgogICAgfCBNcnNcLiAgICAgICAgICAgICAjIG9yICJNcnMuIiwKICAgIHwgTXNcLiAgICAgICAgICAgICAgIyBvciAiTXMuIiwKICAgIHwgSnJcLiAgICAgICAgICAgICAgIyBvciAiSnIuIiwKICAgIHwgRHJcLiAgICAgICAgICAgICAgIyBvciAiRHIuIiwKICAgIHwgUHJvZlwuICAgICAgICAgICAgIyBvciAiUHJvZi4iLAogICAgfCBTclwuICAgICAgICAgICAgICAjIG9yICJTci4iLAogICAgfCBUXC5WXC5BXC4gICAgICAgICAjIG9yICJULlYuQS4iLAogICAgICAgICAgICAgICAgICAgICAgICAjIG9yLi4uICh5b3UgZ2V0IHRoZSBpZGVhKS4KICAgICkgICAgICAgICAgICAgICAgICAgIyBFbmQgbmVnYXRpdmUgbG9va2JlaGluZC4KICAgIChcaCt8XiQpICAgICAgICAgICMgU3BsaXQgb24gd2hpdGVzcGFjZSBiZXR3ZWVuIHNlbnRlbmNlc1wvZW1wdHkgbGluZXMuCiAgICAvbWl4JzsKIAokdGV4dCA9IDw8PEVPTApUaGlzIGlzIHBhcmFncmFwaCBvbmUuIFRoaXMgaXMgc2VudGVuY2Ugb25lLiBTZW50ZW5jZSB0d28hCiAKVGhpcyBpcyBwYXJhZ3JhcGggdHdvLiBUaGlzIGlzIHNlbnRlbmNlIHRocmVlLiBTZW50ZW5jZSBmb3VyIQpFT0w7CiAKZWNobyAiXG5CZWZvcmU6IFxuIiAuICR0ZXh0IC4gIlxuIjsKIAokc2VudGVuY2VzID0gcHJlZ19zcGxpdCgkcmUsICR0ZXh0LCAtMSwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsKIAokc2VudGVuY2VzWzJdID0gIiI7IC8vIHJlbW92ZSAnc2VudGVuY2Ugb25lJwogCnByaW50X3IoJHNlbnRlbmNlcyk7CiAKLy8gcHV0IHRleHQgYmFjayB0b2dldGhlcgokdGV4dCA9IGltcGxvZGUoICRzZW50ZW5jZXMgKTsKIAplY2hvICJcbkFmdGVyOiBcbiIgLiAkdGV4dCAuICJcbiI7