如何使用PHP在关注数据中使用正则表达式

时间:2010-09-11 10:28:47

标签: php regex

// [ { "id": "715320" ,"t" : "500268" ,"e" : "BOM" ,"l" : "15.55" ,"l_cur" : "Rs.15.55" 
,"ltt":"3:59PM IST" ,"lt" : "Sep 9, 3:59PM IST" ,"c" : "+1.69" ,"cp" : "12.19"
,"ccol" : "chg" } ]

我需要获取每个名称并为每个

分配值

喜欢
$ ID = 715320;
$ E = BOM;

从以上数据来看,我该怎么做?

4 个答案:

答案 0 :(得分:3)

由于这是JSON编码数据,您可以使用json_decode而不是正则表达式 - 这更可靠(确保删除前导\\,因为它是注释而不是JSON)。

然后将数据输入命名变量:

$array = json_decode($string, true);
foreach ($array as $k => $v){
    $$k = $v;
}

这会导致idt等(现在是$ array中的键)被设置为自己的变量,例如$id$t

编辑:作为aularon注释,您还可以使用extract方法将数组键移动到全局范围。

答案 1 :(得分:2)

你的字符串看起来像JSon数据。您应该使用JSon methods来解析内容。


如果你真的想使用正则表达式,你可以这样做:

<?php
$yourString = '// [ { "id": "715320" ,"t" : "500268" ,"e" : "BOM" ,"l" : "15.55" ,"l_cur" : "Rs.15.55" 
,"ltt":"3:59PM IST" ,"lt" : "Sep 9, 3:59PM IST" ,"c" : "+1.69" ,"cp" : "12.19" 
,"ccol" : "chg" } ] ';

preg_match_all("/\"(.+?)\"\s*:\s*\"(.+?)\"/", $yourString, $matches, PREG_SET_ORDER);

foreach($matches as $match){
    $resultArray[$match[1]] = $match[2];
}

print_r($resultArray);

?>

Code on ideone


在此代码中使用数组而不是变量,但如果您确实想要使用$e之类的变量,这是一个非常糟糕的主意,您可以使用变量

您可以通过以下方式替换foreach内容: ${$match[1]} = $match[2];


资源:

关于同一主题:

答案 2 :(得分:0)

这不仅仅是JSON吗?然后看看json_decode。或者您是否有理由需要使用正则表达式?

答案 3 :(得分:0)

您不需要正则表达式,上面是JSON对象表示法,您需要对其执行php json_decode,获取值,这将是一个关联数组:

$str='[ { "id": "715320" ,"t" : "500268" ,"e" : "BOM" ,"l" : "15.55" ,"l_cur" : "Rs.15.55" 
,"ltt":"3:59PM IST" ,"lt" : "Sep 9, 3:59PM IST" ,"c" : "+1.69" ,"cp" : "12.19" 
,"ccol" : "chg" } ] ';

$data=json_decode($str, true); //true to get the data as associative arrays rather than objects.
$data = $data[0];//since it's an object inside an array

从现在开始,建议将其保存为关联数组,并使用数组访问器访问对象:

$id = $data['id'];

PHP的extract函数可用于将这些值提取到当前上下文中,但这很危险,坚持直接访问数组是一个更好的主意。