Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用preg_match从这个PHP字符串中提取数据?_Php_Arrays_Preg Match - Fatal编程技术网

如何使用preg_match从这个PHP字符串中提取数据?

如何使用preg_match从这个PHP字符串中提取数据?,php,arrays,preg-match,Php,Arrays,Preg Match,在数据数组5436342W5中提取内容的最佳方法是什么。。。从以下php字符串: series: [{ type: 'area', name: 'product_data', data: [ 5436, 342w5, 564s5, 6778, 8954, 567e5, 6578, 67584 ] }] 下面是什么 preg_match("/(.*), (.*)/", $input_line, $output_array); 提前感谢: 编辑:完成下面的代码 PHP:

在数据数组5436342W5中提取内容的最佳方法是什么。。。从以下php字符串:

series: [{
    type: 'area',
    name: 'product_data',
    data: [ 5436, 342w5, 564s5, 6778, 8954, 567e5, 6578, 67584 ]
}]
下面是什么

preg_match("/(.*), (.*)/", $input_line, $output_array);
提前感谢:

编辑:完成下面的代码

PHP: file.html:

<!DOCTYPE>
 <html>
 <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>Index</title>

    <script type="text/javascript">
        var chart;
        jQuery(document).ready(function() {
            chart = new Highcharts.Chart({
                series: [{
                    type: 'area',
                    name: 'product_data',
                    data: [ 5436, 342w5, 564s5, 6778, 8954, 567e5, 6578, 67584 ]
                }]
            });
        });
    </script>

    <body>

    </body>
</head>

您可以使用此模式进行操作,这不是更简单的方法,但它是一次性完成的,并且非常有效:

$pattern = "~
(?:
    \G(?!\A),  # anchored to the previous match
  |
    \A         # anchored at the start of the string
    [^s]*(?:s(?!eries:)[^s]*)*  # all until 'series:'
    series:
    [^'d]*(?:'[^']*'[^'d]*|\Bd|d(?!ata:))* # all until 'data:'
    data:
    \s*\[
)
\s*\K    # remove all on the left from the result
[^], ]+  # match the item
~x";

if (preg_match_all($pattern, $str, $m))
    print_r($m[0]);
您可以使用一种更传统的方法,首先提取阵列,然后将其分解为项目:

$pattern = '~\bdata: \[\K[^]]+~';

if (preg_match($pattern, $str, $m)) {
    $items = explode(', ', trim($m[0]));
    print_r($items);
} 

或者像这样:

preg_match('#data:\s\[(.*)\]#', $input_line, $output_array);
$data = explode(',', $output_array[1]);
print_r($data);

这不完全是你想要的答案,但这里是

数据是JSON编码的,但为了让PHP理解它,需要进行一些调整:

$:~/testscripts> cat js.php
<?php

// Raw data

$input_line=<<<STRING1
series: [{
    type: 'area',
    name: 'product_data',
    data: [ 5436, 342w5, 564s5, 6778, 8954, 567e5, 6578, 67584 ]
}]
STRING1;

$data=json_decode($input_line,true);

echo "Decoded: ".print_r($data,true).PHP_EOL;

echo "---------------------".PHP_EOL;
// Adjust format

$d2=<<<STRING2
{"series": [{
    "type":"area",
    "name": "product_data",
    "data": [ "5436", "342w5", "564s5", "6778", "8954", "567e5", "6578", "67584" ]
}]
}
STRING2;

$dd2=json_decode($d2,true);
echo "Decoded D2: ".print_r($dd2,true).PHP_EOL;

echo "---------------------".PHP_EOL;

// Reverse

$a=array(
    'series'=>array(
        array(
            'type'=>'area',
            'name'=>'product_data',
            'data'=>array('5436','342w5','564s5', '6778', '8954', '567e5', '6578', '67584')
        )
    )
);

echo "Encoded: ".json_encode($a).PHP_EOL;

$series=$a['series'];
$dummy=reset($series); // return the first element of array
$data=$dummy['data'];

echo "Data: ".print_r($data,true).PHP_EOL;
可以看出,尽管$input_行和执行json_编码的结果相似,但只有调整后的原始数据工作正常

您需要调整$input_行,方法是将所有内容都包含在语音标记和not'中,并可能使用一组更简单的正则表达式在开始和结束处添加大括号,然后将其传递给json_解码函数,true返回一个数组。之后,应该是访问数组元素的简单情况


对不起,代码墙不是你想要的。我想我会添加另一个可能更容易的选项。或者可能不是

你是如何得到这样一个字符串的?我使用了file\u get\u contents-然后点了tagsHmmmm。。。这看起来不像字符串。您的目标是从已知的HTML文件中提取JavaScript代码?是的,如果可能的话?
$:~/testscripts> cat js.php
<?php

// Raw data

$input_line=<<<STRING1
series: [{
    type: 'area',
    name: 'product_data',
    data: [ 5436, 342w5, 564s5, 6778, 8954, 567e5, 6578, 67584 ]
}]
STRING1;

$data=json_decode($input_line,true);

echo "Decoded: ".print_r($data,true).PHP_EOL;

echo "---------------------".PHP_EOL;
// Adjust format

$d2=<<<STRING2
{"series": [{
    "type":"area",
    "name": "product_data",
    "data": [ "5436", "342w5", "564s5", "6778", "8954", "567e5", "6578", "67584" ]
}]
}
STRING2;

$dd2=json_decode($d2,true);
echo "Decoded D2: ".print_r($dd2,true).PHP_EOL;

echo "---------------------".PHP_EOL;

// Reverse

$a=array(
    'series'=>array(
        array(
            'type'=>'area',
            'name'=>'product_data',
            'data'=>array('5436','342w5','564s5', '6778', '8954', '567e5', '6578', '67584')
        )
    )
);

echo "Encoded: ".json_encode($a).PHP_EOL;

$series=$a['series'];
$dummy=reset($series); // return the first element of array
$data=$dummy['data'];

echo "Data: ".print_r($data,true).PHP_EOL;
$~/testScripts> php -f js.php 
Decoded: 
---------------------
Decoded D2: Array
(
    [series] => Array
        (
            [0] => Array
                (
                    [type] => area
                    [name] => product_data
                    [data] => Array
                        (
                            [0] => 5436
                            [1] => 342w5
                            [2] => 564s5
                            [3] => 6778
                            [4] => 8954
                            [5] => 567e5
                            [6] => 6578
                            [7] => 67584
                        )
                )
        )
)

---------------------
Encoded: {"series":[{"type":"area","name":"product_data","data":["5436","342w5","564s5","6778","8954","567e5","6578","67584"]}]}
Data: Array
(
    [0] => 5436
    [1] => 342w5
    [2] => 564s5
    [3] => 6778
    [4] => 8954
    [5] => 567e5
    [6] => 6578
    [7] => 67584
)