function ($matches) {
if ($matches[1]) return str_replace('"',"«",$matches[1]);
else return str_replace('"',"»",$matches[2]);
},
<tab>"Он сказал, — поехали»
$datatext=preg_replace('/\B\"\b/','«',$datatext); // в начале
$datatext = preg_replace('/\b(.*?)"/', '$1»', $datatext); // в конце
[A-Za-zА-Яа-яЁё0-9]
а то елочки переворачивало, если место слова "888" в закавыченной фразе.