Assuming you want to break each word after five characters, if they are no longer separated by a hyphen, treating the object as one character, try the following:
$result = preg_replace(
'/
(?:
(?<=
[\s-]
)
|
\G
)
(
(?>
&\
|
[^\s-]
){5}
)
(?=[^\s-])
'\1­', $subject);
It changes
supercalifragilisticexpidon'tremember!
alrea-dy se-parated
count entity as one character&
F&
at
super­calif­ragil­istic­expid­on'tr­ememb­er!
alrea-dy se-parat­ed
count entit­y as one chara­cter&#345;­blahb­lah
F&#xe5;rev­ejle
source
share