2016-10-21 4 views
1

Я ищу для извлечения некоторых данных из сериализованного массива, хранящегося в базе данных MySql. Я унаследовал это, и некоторые записи разбиты, но я все еще могу извлечь некоторую информацию. Когда я несериализую, он возвращается с ошибкой, поэтому, к сожалению, это невозможно.Используйте preg_match для извлечения части сериализованных данных в PHP

Это некоторые из сериализованных данных: -

s:16:"current_postcode";s:8:"TT12 3TT"; 

Ищу извлечь только значение из этого с помощью preg_match, но мне нужна помощь, пытаясь извлечь это в PHP.

Вы можете помочь?

+0

Любая действительная причина, по которой вы не можете просто ее неэтериализировать? Если вам нужно запросить часть сериализованных данных, то дизайн вашей базы данных, скорее всего, будет плохим. – ShiraNai7

+0

Привет ShiraNai7, я унаследовал эту базу данных, как уже выражено выше, и некоторые данные нарушены. Вот почему я хочу это сделать. Есть 400 000 записей, поэтому я не буду пытаться все это исправить в ближайшее время. –

+1

Определите «сломанный». Вы также можете опубликовать всю сериализованную строку, а не только ее часть. – ShiraNai7

ответ

0

Вы можете попробовать это:

preg_match_all('/"([^"]+)"/', $data, $matches); 

или

preg_match_all('/(?:s:16:|s:8:)"([^"]+)"/', $data, $matches); 

но последний является действительным, только если у вас всегда есть S: 16 или S: 8 (длина данных item) для данной части данных, которую вы ищете. В противном случае это не будет правильным

+0

Как этот дескриптор скрывает кавычки в строках? 's: 12:« Some \ »text \" "' –

+0

Длина меняется, так как наши почтовые индексы могут быть всего 5 символов и выше 8. Может ли быть что-то в этом, чтобы покрыть эту вероятность? –

+0

В принципе, я просто хочу вернуть TT12 3TT из этого кода выше. –