我有一些看起来像这样的数据:
{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}
我需要删除引号内的所有项目,例如69,70,..,77
。
我知道我应该使用preg_split
功能。
我正在寻找关于我需要传递给preg_split
的正则表达式的帮助,以便返回所需的数据。
修改
对不起,我的初步问题不明确。我想收集语音标记之间的所有值,并让它们以数组形式返回(我对保留其余数据不感兴趣 - 我需要的只是语音标记内的值)
编辑2 数据是一个序列化对象,我没有包含完整的对象以节省空间。
答案 0 :(得分:2)
没有正则表达式:
$v = 'a:9:{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}';
$v = unserialize($v);
print_r($v);
$v = array_combine(array_keys($v), array_fill(0, count($v), ''));
echo serialize($v);
但是这看起来,如何提到max,就像序列化对象的一部分一样 你应该检查一下你是否能够使用它的完整语法...
<强>更新强>
好吧,如果你只想要这个序列化数组的值,那就更容易了:
$v = 'a:9:{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}';
$v = unserialize($v);
$v = array_values($v);
print_r($v);
输出:
Array
(
[0] => 69
[1] => 70
[2] => 71
[3] => 72
[4] => 73
[5] => 74
[6] => 75
[7] => 76
[8] => 77
)
array_values()
甚至不是必需的。
答案 1 :(得分:1)
如果您确实要删除引号之间的所有数字,请使用
$string = preg_replace('/"[0-9]+"/', '""', $string);
如果要删除这些内容之间的所有内容,请使用
$string = preg_replace('/"[^"]+"/', '""', $string);
编辑问题:
preg_match_all('/"([^"]+)"/', $string, $matches);
$ matches将包含一个包含字符串的数组数组。
答案 2 :(得分:0)
这样的事情应该有效:
$str = '{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}';
$str = preg_replace('#:"[^"]*"#', '', $str);
echo $str . "\n";
答案 3 :(得分:0)
这将更有用
$data = 'a:9:{i:0;s:2:"69";i:1;s:2:"70";i:2;s:2:"71";i:3;s:2:"72";i:4;s:2:"73";i:5;s:2:"74";i:6;s:2:"75";i:7;s:2:"76";i:8;s:2:"77";}';
$data = unserialize($data);
echo implode(',',$data);