Apply PHP regex replace on a multi-line repeated pattern

Posted by Hussain on Stack Overflow See other posts from Stack Overflow or by Hussain
Published on 2010-05-01T04:45:05Z Indexed on 2010/05/01 4:57 UTC
Read the original article Hit count: 241

Filed under:
|
|
|

Let's say I have this input:

I can haz a listz0rs!
# 42
# 126
I can haz another list plox?
# Hello, world!
# Welcome!

I want to split it so that each set of hash-started lines becomes a list:

I can haz a listz0rs!
<ul>
    <li>42</li>
    <li>126</li>
</ul>
I can haz another list plox?
<ul>
    <li>Hello, world!</li>
    <li>Welcome!</li>
</ul>

If I run the input against the regex "/(?:(?:(?<=^# )(.*)$)+)/m", I get the following result:

Array
(
    [0] => Array
    (
        [0] => 42
    )
    [1] => Array
    (
        [0] => 126
    )
    [2] => Array
    (
        [0] => Hello, world!
    )
    [3] => Array
    (
        [0] => Welcome!
    )
)

This is fine and dandy, but it doesn't distinguish between the two different lists. I need a way to either make the quantifier return a concatenated string of all the occurrences, or, ideally, an array of all the occurrences.
Ideally, this should be my output:

Array
(
    [0] => Array
    (
        [0] => 42
        [1] => 126
    )
    [1] => Array
    (
        [0] => Hello, world!
        [1] => Welcome!
    )
)

Is there any way of achieving this, and if not, is there a close alternative?
Thanks in advance!

© Stack Overflow or respective owner

Related posts about php

Related posts about regex