2015-06-03 3 views
2

У меня есть следующие использование для preg_match_all:Объяснение для PHP preg_match_all соответствует массив print_r

$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

+1

Существует пробел после '' Третий текст', потому что он все еще ловит '\ n' – Darren

+0

@Darren. Я не думаю, что, поскольку если есть другое кеширование, это должно быть продемонстрировано в новом ключе ключа, а также, если поэтому, почему у второго массива нет пустой строки? – SaidbakR

+0

Посмотрите, что показывает 'var_dump ($ matches)', он имеет более подробную информацию –

ответ

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>"; 
0

Я пытаюсь повторить это. Я обычно использую этот инструмент https://www.debuggex.com/r/AXpFXcR-ioMLhLCd, который объясняет условия Regex более привлекательным способом.

До сих пор, я думаю, код анализирует регулярное выражение, и только один \n улавливается, поэтому следующий переходит непосредственно к выходу. Но я пытаюсь подтвердить это поведение.

Смежные вопросы