如何使用PHP中的正则表达式在字符串中搜索可以按任何顺序排列的子字符串

时间:2013-03-23 13:17:51

标签: php regex json

我目前正在使用以下列格式输出JSON数据的网络服务:

{"ID":1291,"Name":"Houses of the Holy","Artist":"Led Zeppelin","Year":1973}

但是,订单从一个项目到下一个项目不一致。例如:

{"ID":2958,"Label":"Reprise Records","Name":"Electric Ladyland","Year":1968}

当然,我不能编写一个正则表达式,它依赖于统一顺序的属性,因为顺序因项目而异(尽管它们始终以ID开头)。

我会使用preg_split使用',"'作为分隔符,但偶尔会有一个跟踪列表,如下:

{"ID":9237,"Tracklist":[{"Track1":"Taxman","Track2":"Eleanor Rigby"}]}

......这会弄乱它。

如何使用正则表达式搜索可能以任何顺序出现的子字符串,或者根本不显示?或者我是否必须在Web服务返回的每个项目上运行多个正则表达式,每个项目对应一个可能的属性?

2 个答案:

答案 0 :(得分:5)

使用json_decode()

访问每个项目应该很容易
$results = json_decode('{"ID":2958,"Label":"Reprise Records","Name":"Electric Ladyland","Year":1968}', true);
print_r($results);

输出: 排列 (     [ID] => 2958     [标签] => Reprise Records     [姓名] =>电动Ladyland     [年] => 1968年 )

答案 1 :(得分:0)

我想知道你为什么不想使用json_decode()

$json_string = '{"ID":1291,"Name":"Houses of the Holy","Artist":"Led Zeppelin","Year":1973}';
 $json_array =json_decode($json_string,true);

输出

Array
(
[ID] => 1291
[Name] => Houses of the Holy
[Artist] => Led Zeppelin
[Year] => 1973
)

然后,您可以按照自己想要的方式操作数组