我对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关于regex有关,我需要知道为什么两个数组不同?在线演示here
答案 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
,因此下一个代码将直接传递给输出。但我试图证实这种行为。