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); // в конце
Исходная строка:
$datatext='"7" "444 "888"
"а" "ддд "жжж"';
если регулярка '#((?![A-Za-zА-Яа-яЁё])\")|(.\"(?![A-Za-zА-Яа-яЁё]))#u'
то возвращает
«7» »444 »888»
«а» «ддд «жжж»
если добавляем в условия цифры '#((?![A-Za-zА-Яа-яЁё0-9])\")|(.\"(?![A-Za-zА-Яа-яЁё0-9]))#u'
то получаем, корректные елочки и с цифрами
«7» «444 «888»
«а» «ддд «жжж»