Как я скребу между шаблоном и n-й вхождением запятой - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь очистить текстовый файл между шаблоном и 12-й запятой строки.
Все, что я получаю, это пустая страница.

Мой ожидаемый результат:

WHEAT-SRW - CHICAGO BOARD OF TRADE",200114,2020-01-14,001602,CBT ,00,001 , 476764, 146061, 107856, 162340, 136922

Это код:

$scrape = scrape_between($scraped_page, 
                         'WHEAT-SRW - CHICAGO BOARD OF TRADE', 
                         '/[.*^,]+,[.*^,]+,[.*^;]+,[.*^,]+,[.*^,]+/'
                         );

Если я использую другой шаблон, например fghi, все в порядке и Я получил свой результат.

Что не так?

Полный сценарий:

<?php
    function scrape_between($data, $start, $end){
        $data = stristr($data, $start);
        $data = substr($data, strlen($start));
        $stop = stripos($data, $end);
        $data = substr($data, 0, $stop);
        return $data;
    }
    function curl($url) {
        $options = Array(
            CURLOPT_RETURNTRANSFER => TRUE,
            CURLOPT_FOLLOWLOCATION => TRUE,
            CURLOPT_AUTOREFERER => TRUE,
            CURLOPT_CONNECTTIMEOUT => 120,
            CURLOPT_TIMEOUT => 120,
            CURLOPT_MAXREDIRS => 10,
            CURLOPT_USERAGENT => "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1a2pre) Gecko/2008073000 Shredder/3.0a2pre ThunderBrowse/3.2.1.8",
            CURLOPT_URL => $url,
        );

        $ch = curl_init();
        curl_setopt_array($ch, $options);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
    $scraped_page = curl("https://www.cftc.gov/dea/newcot/deafut.txt");
    $scraped_wheat = scrape_between($scraped_page, 'WHEAT-SRW - CHICAGO BOARD OF TRADE', '/(?:,[^,]+){11}/');

    echo ($scraped_wheat."<br>");
?>

1 Ответ

1 голос
/ 21 января 2020

Я бы не использовал регулярные выражения для этого. Попробуйте что-нибудь в этом духе и посмотрите, работает ли оно:

$pieces = explode('"
"', $scraped_page);
$items = explode(",",$pieces[0]);
$tmp = 0;
foreach ($items as $value) if ($tmp++ < 12) {
    echo ($value.",");
}

Вывод, который я получаю:

"WHEAT-SRW - CHICA GO BOARD OF TRADE", 200114 , 2020-01-14,001602, CBT, 00,001, 476764, 146061, 107856, 162340, 136922,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...