// remove words over 30 chars long
$str = preg_replace('/\S{30,}/', '', $str);
edit: обновляется согласно предложению Тима Р, \ S соответствует любому непробельному символу (так же, как [^\s]
)
Также вот лучший способ включить предложение ehdv использовать wordwrap:
//This will break up the long words with spaces so they don't stretch layouts.
$str = preg_replace('/(\S{30,})/e', "wordwrap('$1', 30, ' ', true)", $str);