fork download
  1. <?php
  2. $str = '--comments--
  3. list of comments
  4. -pre-
  5. comment 1
  6. -/pre-
  7.  
  8. -pre-
  9. comment 2
  10. -/pre-
  11.  
  12. --Answers--
  13. list of Answers
  14. -pre-
  15. Answer 1
  16. -/pre-
  17.  
  18. -pre-
  19. Answer 2
  20. -/pre-
  21. -pre-
  22. Answer 3
  23. -/pre-
  24. -pre-
  25. Answer 4
  26. -/pre-
  27. -pre-
  28. Answer 5
  29. -/pre-
  30. ';
  31.  
  32. preg_match_all('~(?:--([^-]+)--(?:(?!-pre-).)+|(?!\A)\G)\R*-pre-\s*((?:(?!-/pre-).)*)-/pre-\K~s', $str, $matches, PREG_SET_ORDER);
  33.  
  34. // Filter empty values
  35. $matches = array_map(function($v) {
  36. }, $matches);
  37.  
  38. // Initialize two variables which we use them soon
  39. $index = null; $finalArray = [];
  40.  
  41. // Iterate over recent matches in order to apply keys
  42. array_map(function($array) use (&$index, &$finalArray) {
  43. count($array) == 2 ? ($index = $array[0]) && ($finalArray[$index][] = $array[1]) : $finalArray[$index][] = $array[0];
  44. }, $matches);
  45.  
  46. // Print out
  47. print_r($finalArray);
Success #stdin #stdout 0s 82944KB
stdin
Standard input is empty
stdout
Array
(
    [comments] => Array
        (
            [0] => comment 1

            [1] => comment 2

        )

    [Answers] => Array
        (
            [0] => Answer 1

            [1] => Answer 2

            [2] => Answer 3

            [3] => Answer 4

            [4] => Answer 5

        )

)