我的Regex不返回任何内容。为什么?

时间:2018-06-21 06:07:07

标签: php regex

我从以下网址获取内容:http://money18.on.cc/js/real/hk/quote/16981_r.js

此文件的内容如下:

M18.r_16981 = {
    "ltt": '2018/06/21 11:43',
    "np": '0.050',
    "iep": '0.000',
    "iev": '0',
    "ltp": '0.050',
    "vol": '940000',
    "tvr": '49860',



    "dyh": '0.060',
    "dyl": '0.049'
};

我想提取“ vol”之后的数字,即940000。

这是我的php:

<?php

$content = file_get_contents("http://money18.on.cc/js/real/hk/quote/16981_r.js");

echo $content."<br>";

preg_match("/(?<=vol\": ').*(?=', \"tvr)/", $content, $output_array);

print_r(array_values($output_array));
?>

结果不返回任何内容。正则表达式是错误的还是其他任何问题?

谢谢。

2 个答案:

答案 0 :(得分:1)

在积极向前看(?=中,您可以用\s*替换空白以匹配零个或多个(或匹配\s+匹配一个或多个)的空白字符。

(?<=vol": ').*(?=',\s*"tvr)

Regex demo

Php demo

答案 1 :(得分:0)

远射不过...

如果该内容实际上旨在表示JSON并且您可以控制它: 将其设置为正确的格式,因为这样可以更轻松,更安全地从中获取所需的数据。

$jsonString = <<<JSON
{
    "ltt": "2018/06/21 11:43",
    "np": "0.050",
    "iep": "0.000",
    "iev": "0",
    "ltp": "0.050",
    "vol": "940000",
    "tvr": "49860",
    "dyh": "0.060",
    "dyl": "0.049"
}
JSON;

$jsonAsArray = json_decode($jsonString, true);
var_dump($jsonAsArray['vol']);