PHP的解释preg_match_all匹配数组print_r

时间:2015-06-03 23:29:26

标签: php arrays

我对preg_match_all有以下用法:

$re = "/^(-\\w+\\s*.*)\\n*$/um"; 
$str = "-Give on result\n-Second new text\n-The third text\n\nAnother paragraph without list.\n\n-New list here"; 
preg_match_all($re, $str, $matches);

print_r($matches)的输出有一个奇怪的数组:

Array
(
    [0] => Array
        (
            [0] => -Give on result
            [1] => -Second new text
            [2] => -The third text

            [3] => -New list here
        )

    [1] => Array
        (
            [0] => -Give on result
            [1] => -Second new text
            [2] => -The third text
            [3] => -New list here
        )

)

这里我说的是索引0的数组,并且print_r()输出中出现了视觉上的空白行。实际上,这个问题可能与my another question关于有关,我需要知道为什么两个数组不同?在线演示here

2 个答案:

答案 0 :(得分:0)

尝试这么容易做到

<?php

//$re = "/^(-\\w+\\s*.*)\\n*$/um"; 
$re = "/^(\\h*(?:-|&)\\h*\w+\\s*.*)\\n*$/um";
$str = "-Give on result\n-Second new text\n-The third text\n\nAnother paragraph without list.\n\n-New list here"; 
preg_match_all($re, $str, $matches);
echo "<pre>";
print_r($matches);
echo "</pre>";
$i = 0;


    echo "<ul>".preg_replace_callback($re,function($mt){return "<li>".$mt[1]."</li>";},$str)."</ul>";



$re = array_filter(preg_split('/\n/', $str));

echo "<pre>";
print_r($re);
echo "</pre>";

答案 1 :(得分:0)

我正试图复制这个。我通常使用这个工具https://www.debuggex.com/r/AXpFXcR-ioMLhLCd以更高级的方式解释正则表达式条件。

到目前为止,我认为代码会破坏正则表达式并且只捕获一个\n,因此下一个代码将直接传递给输出。但我试图证实这种行为。