Я не знаю, насколько вы контролируете входную строку, но использование explode () намного проще и чище.Единственное требование - вы должны иметь возможность добавлять разделители в строку.
$string = '1.this is the first|2.second|3.and thethird';
$array=explode('|',$string);
foreach($line as $array){
echo $line."<br>";
}