Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/231.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用preg_match在PHP中提取部分序列化数据_Php_Mysql_Serialization_Preg Match - Fatal编程技术网

使用preg_match在PHP中提取部分序列化数据

使用preg_match在PHP中提取部分序列化数据,php,mysql,serialization,preg-match,Php,Mysql,Serialization,Preg Match,我希望从MySql数据库中存储的序列化数组中提取一些数据。我继承了这个,有些记录被破坏了,但我仍然可以提取一些信息。当我取消序列化时,它会返回一个错误,所以很遗憾,这是不可能的 这是一些序列化数据:- s:16:"current_postcode";s:8:"TT12 3TT"; 我希望使用preg_match从中提取值,但是我需要一些帮助来尝试在PHP中提取这个值 你能帮忙吗?你可以试试这个: preg_match_all('/"([^"]+)"/', $data, $matches);

我希望从MySql数据库中存储的序列化数组中提取一些数据。我继承了这个,有些记录被破坏了,但我仍然可以提取一些信息。当我取消序列化时,它会返回一个错误,所以很遗憾,这是不可能的

这是一些序列化数据:-

s:16:"current_postcode";s:8:"TT12 3TT";
我希望使用preg_match从中提取值,但是我需要一些帮助来尝试在PHP中提取这个值


你能帮忙吗?

你可以试试这个:

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


但是,最后一个选项只有在您查找的给定数据部分始终具有s:16或s:8(数据项的长度)时才有效。否则它将不正确

您可以尝试使用此选项:

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



但是,最后一个选项只有在您查找的给定数据部分始终具有s:16或s:8(数据项的长度)时才有效。否则它就不正确了

有什么有效的理由不能取消序列化吗?如果您需要查询序列化数据的一部分,那么您的数据库设计可能很糟糕。Hi ShiraNai7,我继承了上面已经表达过的这个数据库,其中一些数据被破坏了。这就是我想这样做的原因。有400000条记录,所以我不会很快尝试修复其中任何一条。定义“损坏”。您还可以发布整个序列化字符串,而不仅仅是其中的一部分。我恐怕不能这样做,因为这是敏感信息。由于新行未正确提交而导致偏移量问题,所以它被破坏。每次将序列化数据放入数据库时,Codd都会杀死一只小猫。您是在尝试提取所有值,还是仅提取邮政编码?是否有任何有效的理由无法将其取消序列化?如果您需要查询序列化数据的一部分,那么您的数据库设计可能很糟糕。Hi ShiraNai7,我继承了上面已经表达过的这个数据库,其中一些数据被破坏了。这就是我想这样做的原因。有400000条记录,所以我不会很快尝试修复其中任何一条。定义“损坏”。您还可以发布整个序列化字符串,而不仅仅是其中的一部分。我恐怕不能这样做,因为这是敏感信息。由于新行未正确提交而导致偏移量问题,所以它被破坏。每次将序列化数据放入数据库时,Codd都会杀死一只小猫。您是在尝试提取所有值,还是仅提取邮政编码?此操作如何处理字符串中的转义引号<代码>s:12:“一些\“文本\”长度确实会发生变化,因为我们的邮政编码可以少至5个字符,高达8个字符。有什么东西可以放在里面来掩盖这种可能性吗?基本上我只想从上面的代码返回TT12 3TT。这个邮政编码有什么变化?我指的是它的价值观。有一些常见的模式吗?它们总是大写字母+数字吗?这是如何处理字符串中的转义引号的<代码>s:12:“一些\“文本\”长度确实会发生变化,因为我们的邮政编码可以少至5个字符,高达8个字符。有什么东西可以放在里面来掩盖这种可能性吗?基本上我只想从上面的代码返回TT12 3TT。这个邮政编码有什么变化?我指的是它的价值观。有一些共同的模式吗?它们总是大写字母+数字吗?