PHP中JSON字符串的正则表达式提取
我在PHP中有一个字符串,它可能类似于以下内容: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
$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
)
)