Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.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中JSON字符串的正则表达式提取_Php_Regex_Json - Fatal编程技术网

PHP中JSON字符串的正则表达式提取

PHP中JSON字符串的正则表达式提取,php,regex,json,Php,Regex,Json,我在PHP中有一个字符串,它可能类似于以下内容: $string = '"["1000: Person One","1001: Person 2","1002: Person Three"]"'; 它是从JSON数组生成的。我需要编写一个正则表达式,将JSON元素分离到PHP数组中。我只需要在每个冒号出现之前提取数字。我尝试了以下代码,但没有成功: preg_match_all('/\"[^:]*:/',$string,$target_array); //No Success preg_mat

我在PHP中有一个字符串,它可能类似于以下内容:

$string = '"["1000: Person One","1001: Person 2","1002: Person Three"]"';
它是从JSON数组生成的。我需要编写一个正则表达式,将JSON元素分离到PHP数组中。我只需要在每个冒号出现之前提取数字。我尝试了以下代码,但没有成功:

preg_match_all('/\"[^:]*:/',$string,$target_array); //No Success
preg_match_all(/\"\d*:/,$string,$target_array); //No Success
我需要的是一个正则表达式,它可以在
之间提取任何字符

当然,如果一个人的名字碰巧包含一个类似的模式,这会留下问题。我能做的最好的事情是将JSON数组解析成PHP数组。因此,作为替代(也是首选)解决方案,一种将JSON数组解析为PHP数组的方法将是惊人的。我已经尝试了
JSON\u解码
字符串,但它总是产生
NULL


Edit:出于好奇,当我直接从输出中复制字符串而不进行过滤和
json\u解码时,它会完美地转换为PHP数组。

如果它是有效的json字符串,请尝试以下方法(解决方案比使用正则表达式更安全):


这里,我们来看看这个:

正如乔纳森·库恩(Jonathan Kuhn)所确认的那样,json_解码工作正常。但您也可以使用正则表达式:

$string = '["1000: Person One","1001: Person 2","1002: Person Three"]';
preg_match_all('/"(.*?):\s*([^"]+)"/', $string, $matches);
print_r($matches);
输出

Array
(
    [0] => Array
        (
            [0] => "1000: Person One"
            [1] => "1001: Person 2"
            [2] => "1002: Person Three"
        )

    [1] => Array
        (
            [0] => 1000
            [1] => 1001
            [2] => 1002
        )

    [2] => Array
        (
            [0] => Person One
            [1] => Person 2
            [2] => Person Three
        )
)

你是如何得到
$string
?json_decode有什么问题吗?对我来说很好:你可以在数组上循环并在
上爆炸。当我告诉你我已经尝试过这个时,你不会相信我,但出于某种原因,它现在可以工作了,所以我向你表示感谢。
Array
(
    [0] => Array
        (
            [0] => "1000: Person One"
            [1] => "1001: Person 2"
            [2] => "1002: Person Three"
        )

    [1] => Array
        (
            [0] => 1000
            [1] => 1001
            [2] => 1002
        )

    [2] => Array
        (
            [0] => Person One
            [1] => Person 2
            [2] => Person Three
        )
)