Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.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
Php 如何使用正则表达式从字符串返回单词?_Php_Regex - Fatal编程技术网

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

Php 如何使用正则表达式从字符串返回单词?,php,regex,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\u split功能 我正在寻找有关需要传递到preg_split以返回所需数据的正则表达式的帮助 编辑 对不起,我最初的问题不清楚。我想收集语音标记之间的

我有一些数据看起来像:

{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\u split
功能

我正在寻找有关需要传递到
preg_split
以返回所需数据的正则表达式的帮助

编辑

对不起,我最初的问题不清楚。我想收集语音标记之间的所有值,并将它们返回到一个数组中(我对保留其余数据不感兴趣-我只需要语音标记中的值)

编辑2
数据是一个序列化的对象,为了节省空间,我没有包含完整的对象。

如果确实要删除引号之间的所有数字,只需使用

$string = preg_replace('/"[0-9]+"/', '""', $string);
如果要删除这两个选项之间的所有内容,请使用

$string = preg_replace('/"[^"]+"/', '""', $string);
对于您编辑的问题:

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

$matches将包含一个包含字符串的数组。

如果确实要删除引号之间的所有数字,只需使用

$string = preg_replace('/"[0-9]+"/', '""', $string);
如果要删除这两个选项之间的所有内容,请使用

$string = preg_replace('/"[^"]+"/', '""', $string);
对于您编辑的问题:

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

$matches将包含一个包含字符串的数组。

类似的操作应该可以:

$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";

像这样的方法应该会奏效:

$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";
没有regexp:

$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\u values()
实际上甚至不是必需的。

没有regexp:

$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\u values()
实际上甚至不是必需的。

这将更有用

$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);

这将更有用

$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);

这看起来像是由数据库生成的数据。使用此函数将其转换为数组、编辑并转换回数组不是更容易吗?请给我们一个结果示例。我同意Max。。。您必须在字符串的开头添加
a:NUMBER\u OF_ELEMENTS
。我编辑了我的答案,只搜索引号之间的字符串。(但获取这些值的方法确实很奇怪。)这看起来像是由。使用此函数将其转换为数组、编辑并转换回数组不是更容易吗?请给我们一个结果示例。我同意Max。。。您必须在字符串的开头添加
a:NUMBER\u OF_ELEMENTS
。我编辑了我的答案,只搜索引号之间的字符串。(但这确实是一种奇怪的获取这些值的方法。)应该注意的是,这个表达式也删除了前面的冒号。所以是:2:“71”;'变成“s:2;”。这可能是询问者想要的,但不是他们说的。@MattH。很好的一点,但最初我并没有抓住
,字符串只剩下
,我觉得这不太合适,所以我没有太大的自由在正则表达式中包含
。应该注意的是,这个表达式也删除了前面的冒号。所以是:2:“71”;'变成“s:2;”。这可能是询问者想要的,但不是他们说的。@MattH。很好的一点,但最初我并没有抓住
,字符串只剩下
这在我看来并不正确,所以我几乎没有自由地将
包含在正则表达式中。