Proper splitting of HTML is very tricky, and not worth doing with regular expressions. If you want HTML, something like DOM text iterator will be useful.
Convert description to text:
$text = html_entities_decode(strip_tags($html),ENT_QUOTES,'UTF-8');
This will take first 200 characters (200 words is a bit too much for a sentence, isn't it?) and then look for end of sentence:
$text = preg_replace('/^(.{200}.*?[.!?]).*$/','\1',$text);
You could change [.!?] to something more sophisticated, e.g. require space after punctuation or require that there's no punctuation nearby:
(?<![^.!?]{5})[.!?](?=[^.!?]{5})
(?=…) is positive assertion. (?<!…) negative assertion that looks behind current position. {5} means 5 times.
I haven't tested it :)