PHP *Lösung gefunden* RegEx: Subpattern

Helo

Gesperrt
31 März 2008
737
140
Guten Abend,

ich hab mal wieder ein Problem mit meinem Erzfeind, dem RegEx :ugly:
Folgender Code ist bislang vorhanden:
PHP:
$this->con = "{test} {test2}\n{test3} {test4:test5}";
preg_match_all("/\{(.*):?(.*)\}/iU", $this->con, $matches);

ein print_r($matches) gibt folgendes aus:
PHP:
Array
(
    [0] => Array
        (
            [0] => {test}
            [1] => {test2}
            [2] => {test3}
            [3] => {test4:test5}
        )

    [1] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
        )

    [2] => Array
        (
            [0] => test
            [1] => test2
            [2] => test3
            [3] => test4:test5
        )

)

Herauskommen soll aber folgendes:
PHP:
Array
(
    [...]
    [1] => Array
        (
            [...]
            [3] => test4
        )

    [2] => Array
        (
            [0] => test
            [1] => test2
            [2] => test3
            [3] => test5
        )

)

Ich steh grad irgendwie auf dem Schlauch und freue mich schon auf eure Antworten.

Grüße
Helo
 
Zuletzt bearbeitet:
Hi,

nimm beide Male in den den Klammern anstatt dem . ein [^:] , so dass nur Zeichen gematcht werden, die kein Doppelpunkt sind ;-)

Edit: Zur Erklärung (zumindest wie ich es verstehe):
Da du ungreedy bist, matcht das erste (.*) erst mal garnix, dann kommt der :?, da wir aber noch am Anfang des Strings sind matcht der auch net. Und das 2. (.*) übernimmt dann alles was in den geschwungenen Klammern steht, weils ja sonst noch net gematcht wurde.
 
Zuletzt bearbeitet: