从 pregmatch_all 到 csv 的数组

Array from pregmatch_all to csv

我需要将字符串 pregmatch_all 中的所有匹配项(除了匹配末尾具有 "DESCATALOGADO" 的匹配项)写入 CSV。

$pdfText= nl2br($text);

$patternECO = '/^(ECO(?!GEST|DE)(?!GEST|DE)[-\/\w]+(?: [UPMNB]{1,3}(?= ))*) ([^\r\n]+\S)/m' ;
preg_match_all($patternECO, $text, $matches);

$fp = fopen('file.csv', 'w');

foreach ($matches as $match) {
    fputcsv($fp, $match);
}

fclose($fp);

例如我从pregmatch_all

Array ( 
    [0] => Array ( 
        [0] => ECO-698 Acondicionador Frio-Calor 
        [1] => ECO-CHI-522 Chimenea eléctrica con patas 
        [2] => ECO-CHI-530 Calefactor purificador 
        [3] => ECO-3005 Halógeno Oscilante 400-800-1200 Watts DESCATALOGADO

我想要这样的 csv

ECO-698;Acondicionador Frio-Calor;
ECO-CHI-522;Chimenea eléctrica con patas;
ECO-CHI-530;Calefactor purificador;

使用 PREG_SET_ORDER 选项,这样您就可以在同一行结果中获得每个匹配项的所有捕获组。

然后在循环中,从行中删除元素 0,因为这是整个匹配项,但您只想将捕获组写入文件。

$patternECO = '/^(ECO(?!GEST|DE)(?!GEST|DE)[-\/\w]+(?: [UPMNB]{1,3}(?= ))*) ([^\r\n]+\S)/m' ;
preg_match_all($patternECO, $text, $matches, PREG_SET_ORDER);

$fp = fopen('file.csv', 'w');

foreach ($matches as $match) {
    array_shift($match);
    fputcsv($fp, $match);
}

fclose($fp);