来自 Array with Multine 的 PHP 正则表达式 preg_match 不匹配所有 block

标签 php arrays regex

想知道是否有人可以帮助我使用以下正则表达式,我无法匹配 block multine CF.{Coordonnees Abonne}: 在 PHP 的 preg_match 函数中使用时。

奇怪的是,当我在线执行正则表达式时,尽管该 block 在另一个组中,它似乎仍然有效 regex101 example

这是代码: source code

<?php
$response = array(
      1  => 'CF.{Temps}: 1',
      2  => 'CF.{Etat}: return',
      3  => 'CF.{Code}: 2',
      4  => 'CF.{Values}: plaque',
      5  => '',
      6  => 'CF.{Coordonnees}: LA PERSONNE',
      7  => '    ',
      8  => '    10000  LA VILLE',
      9  => '    ',
      10 => '    0500235689',
      11 => '    0645788923',
      12 => '    Login : test@mail.com',
      13 => '    Password : PassWord!',
      14 => '',
      15 => 'CF.{Groupe}: 3',
      16 => 'CF.{Date}: 4',
);

print_r(parseResponseBody($response));

function parseResponseBody(array $response, $delimiter = ':')
{
    $responseArray = array();
    $lastkey = null;

    foreach ($response as $line) {
        if(preg_match('/^([a-zA-Z0-9]+|CF\.{[^}]+})' . $delimiter . '\s(.*)|([a-zA-Z0-9].*)$/', $line, $matches)) {
                $lastkey = $matches[1];
                $responseArray[$lastkey] = $matches[2];
        }
    }

    return $responseArray;
}
?>

输出:

Array
(
    [CF.{Temps}] => 1
    [CF.{Etat}] => return
    [CF.{Code}] => 2
    [CF.{Values}] => plaque
    [CF.{Coordonnees}] => LA PERSONNE
    [] => 
    [CF.{Groupe}] => 3
    [CF.{Date}] => 4
)

还有我需要提取的最终结果:

Array
(
    [CF.{Temps}] => 1
    [CF.{Etat}] => return
    [CF.{Code}] => 2
    [CF.{Values}] => plaque
    [CF.{Coordonnees}] => LA PERSONNE

        10000  LA VILLE

        0500235689
        0645788923
        Login : test@mail.com
        Password : PassWord!
    [CF.{Groupe}] => 3
    [CF.{Date}] => 4
)

最佳答案

您必须检查迭代时的当前值是否以 block 开头。虽然不是同时:

function parseResponseBody(array $response, $delimiter = ':') {
    $array = [];
    $lastIndex = null;
    foreach ($response as $line) {
        if (preg_match('~^\s*(CF\.{[^}]*})' . $delimiter . '\s+(.*)~', $line, $matches))
            $array[$lastIndex = $matches[1]] = $matches[2];
        elseif ((bool) $line)
            $array[$lastIndex] .= PHP_EOL . $line;
    }
    return $array;
}

Live demo

关于来自 Array with Multine 的 PHP 正则表达式 preg_match 不匹配所有 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48931533/

相关文章:

php - Joomla——查找菜单项的所有翻译

php - 从 iOS 到 php 服务器的 POST 数据始终为 NULL - iOS 10、Swift 3、php

java - 查找二维方形数组中任意随机点的对角线

javascript - 从对象数组动态构建二维数组

python - 如果两列中的名称使用正则表达式匹配,则创建返回 true/false 的新列

javascript - JS/PHP/ZendFramework - 当我用 php 和 ajax 单击按钮时更新我的​​数据表

php - 以数据库方式处理标签的更有效方法是什么?

php - 如何在字符串中查找时间戳

用于验证特殊字符串的 Javascript 正则表达式

javascript - 正则表达式 - 检查小数(javascript)