Come procederei io:
Demo: http://3v4l.org/vgZOCcodice:function wordCheck($word) { $word = $word[0]; if (...) {// qui controllo se $word è una parola valida return $word; } return '<u>'.$word.'</u>'; } function textCheck($text) { return preg_replace_callback('#(?!<.*?)\w+(?![^<>]*?>)#','wordCheck',$text); } echo textCheck("La mia è una provaa con del testo: <a href='http://pippo.it'>html</a>.");