如何使用正则表达式从字符串返回单词?

时间:2012-02-03 17:59:33

标签: php regex

我有一些看起来像这样的数据:

{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 数据是一个序列化对象,我没有包含完整的对象以节省空间。

4 个答案:

答案 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);
相关问题