我正在使用Google计算器来检索转换后的价格,示例输出为:
{lhs: "9000 Euros",rhs: "12 721.5 U.S. dollars",error: "",icc: true}
现在我不能将json_decode
用于此JSON字符串,我已经尝试过但它不起作用,因此我使用正则表达式来检索rhs
字段中的转换价格。 / p>
我需要让正则表达式能够解析数字,而不是货币名称,只是数字,但是我在获取包含字段空间的价格时遇到问题,到目前为止我的正则表达式只有得到12
,我无法得到完整的12 721.5
。
/rhs\: "(\d+|\s+)/i
如何在不包含价格名称的情况下执行此操作?请注意,响应可能/可能不包括转换价格中的空间以及期间。
答案 0 :(得分:2)
如果您只想提取数字部分,那么您的正则表达式可能是:
/[,{]\s*rhs\s*:\s*"([\d.\s]+)/
[...]
方括号是这里替代的适当语法(小数和空格的任意组合)。
编辑:缺少小数点,还有一些用于验证“json”一致性的正则表达式。
答案 1 :(得分:1)
[...]应该捕获空间和.
并在空格和货币之前终止。
/rhs: "([\d .]+)\s/
编辑: 添加获取数据的PHP代码(在我的环境中)
$string = "{lhs: \"9000 Euros\",rhs: \"12 721.5 U.S. dollars\",error: \"\",icc: true}";
$pattern = '/rhs: "([\d .]+)\s/';
preg_match($pattern,$string,$matches);
print "<pre>"; var_dump($matches); print "</pre>";
echo $matches[1];
答案 2 :(得分:0)
此正则表达式:/rhs\: "(\d+|\s+)/i
表示(一个或多个十进制数字)或(一个或多个空格)。它不允许任何十进制数字空格的组合。
$json = '{lhs: "9000 Euros",rhs: "12 721.5 U.S. dollars",error: "",icc: true}';
$matches = array();
preg_match('/"?rhs"?:\s*"((?:[\d ])*(?:\.\d+)?)/', $json, $matches);
$usd = floatval(str_replace(' ', '', $matches[1]));
echo $usd; // Outputs '12721.5'
这应该有效,如果他们的JSON有效,它将继续有效。