Правильное разбиение HTML очень сложно, и не стоит делать с регулярными выражениями. Если вам нужен HTML, вам пригодится что-то вроде DOM-текстовый итератор .
Преобразовать описание в текст:
$text = html_entities_decode(strip_tags($html),ENT_QUOTES,'UTF-8');
Это займет первые 200 символов (200 слов - это слишком много для предложения, не так ли?), А затем искать конец предложения:
$text = preg_replace('/^(.{200}.*?[.!?]).*$/','\1',$text);
Вы можете изменить [.!?]
на что-то более сложное, например, требует пробела после пунктуации или требует, чтобы рядом не было знаков препинания:
(?<![^.!?]{5})[.!?](?=[^.!?]{5})
(?=…)
- положительное утверждение. (?<!…)
отрицательное утверждение, которое выглядит позади текущей позиции. {5}
означает 5 раз.
Я не проверял:)