gudn tach!
/^(.{0,".(ceil(strlen($contents)/2)+20)."})\s,.!?-$/sm
das ist aber nicht mehr das gleiche vie vorher, denn vorher wurde das worttrennzeichen in $1 oder $2 (je nach laenge von $contents und der position des trennzeichens) gespeichert. jetzt geht es floeten.
btw.: je nach beschaffenheit des strings und den informationen, die dir darueber vorliegen, kann es besser sein die zeichenklasse der trennzeichen als negierte nicht-trennzeichen-klasse zu betrachten. also statt [\s,.!?-] [^a-zA-Z0-9_äöüÄÖÜß].
eine etwas mehr an \b angelehnte nachbau-idee ist uebrigens folgende:
$z='[a-zA-Z0-9_äöüÄÖÜß]';
$n='[^a-zA-Z0-9_äöüÄÖÜß]';
(?:(?<!$z)(?!$n)|(?<!$n)(?!$z))
spontan faellt mir kein beispiel ein, bei welchem \b und dieses ding was unterschiedliches machen wuerden (mal von von den locale-einstellungen abgesehen).
prost
seth