замена сериализованного значения в дампе БД

Статус
В этой теме нельзя размещать новые ответы.

krobol

Постоялец
Регистрация
5 Июн 2008
Сообщения
455
Реакции
126
Есть дамп БД, в котором присутствуют сериализованные значения переменных. Пример:

Код:
'a:2:{s:15:\"http://domen.ru\";s:4:\"link\";}'

таких строк много.

Необходимо заменить "domen.ru" на "drugoidomen.ru" по всему дампу БД. Особенность в том, что надо сменить и s:15

Помогите составить preg_replace?

мой вариант (не работает:(
PHP:
$db = preg_replace(
   '%(.*?s:)(.*?)(:\".*?)('.$url1.')(.*?\";.*?)%ie',
   "'\$1'.(\$2 + strlen($url2) - strlen($url1)).'\$3'.$url2.'\$5'",
   $db
);
 
Есть дамп БД, в котором присутствуют сериализованные значения переменных. Пример:
Код:
'a:2:{s:15:\"http://domen.ru\";s:4:\"link\";}'
таких строк много.
Необходимо заменить "domen.ru" на "drugoidomen.ru"

Не совсем понятно.. Нужно заменить "domen.ru" ТОЛЬКО на "drugoidomen.ru" или "domen1.ru" на "drugoidomen1.ru","domen2.ru" на "drugoidomen2.ru"? Если первый случай, то это можно сделать без PHP.
 
Если первый случай, то это можно сделать без PHP.
не получится - надо ещё изменять и значение длины строки.

ТС, что мешает вытянуть сериализованые строки, поменять и воткнуть назад?
 
а может так

PHP:
$db='a:2:{s:15:\"http://domen.ru\";s:4:\"link\";}';

$url1='http://domen.ru';
$url2='http://newdomen.ru';

$db = preg_replace(array('#'.$url1.'#','#'.'s:'.strlen($url1).'#'),array($url2,'s:'.strlen($url2)),$db,1);
всё работает
 
Спасибо за помощь!


Сделал так:
PHP:
$db='a:2:{s:15:\"http://domen.ru\";s:4:\"link\";}';

$url1='domen.ru';
$url2='newdomen.ru';
$db = preg_replace(
        '%s:([0-9]+):\\\"([^"]+)('.$url1.')(.*?)\\\";%ie',
        "'s:'.strlen('\\2".$url2."\\4').':\\"."\""."\\2".$url2."\\4\\"."\"".";'",
        $db);

Для этого пришлось более глубоко изучить регулярные выражения. В частности такие конструкции: [0-9]+ и [^"] :ay:
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху