2016-10-21 87 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(数据的长度项目)为您正在寻找的数据的给定部分。否则它不会是正确的

+0

这个句柄如何在字符串中转义引号? 's:12:“Some \”text \“”' –

+0

长度确实发生了变化,因为我们的邮编只有5个字符和8个字符。有没有什么可以弥补这种可能性? –

+0

基本上我只是想从上面的代码返回TT12 3TT。 –