Преобразование отступа с помощью preg_replace (без обратного вызова)

У меня есть фрагмент XML, возвращенный DOMDocument :: saveXML () . Он уже с большим отступом, с двумя пробелами на уровень, например:



  
    eee
    sd
  

Поскольку невозможно настроить DOMDocument (AFAIK) относительно символа (ов) отступа, я подумал, что можно запустить регулярное выражение и измените отступ, заменив все пары пробелов табуляцией. Это можно сделать с помощью функции обратного вызова ( Демо ):

$xml_string = $doc->saveXML();
function callback($m)
{
    $spaces = strlen($m[0]);
    $tabs = $spaces / 2;
    return str_repeat("\t", $tabs);
}
$xml_string = preg_replace_callback('/^(?:[ ]{2})+/um', 'callback', $xml_string);

Теперь мне интересно, можно ли сделать это без функции обратного вызова (и без модификатора e (ОЦЕНКА)). Есть ли у мастеров регулярных выражений идея?

22
задан Community 23 May 2017 в 12:08
поделиться