Problem mit preg_match_all

Kalito

Erfahrenes Mitglied
Hallo,

ich möchte ein Text auf bestimmte Platzhalter untersuchen und verwende hierfür preg_match_all.
PHP:
preg_match_all("/###.+###/" , $mail_body, $placeholder_array);

Dies sollte eigentlich bei dem String
###User.firstname###,
Wir sind sehr nett wie ###User.lastname###

folgendes Ergebnis auswerfen:
Code:
array (
  0 =>
  array (
    0 => '###User.firstname###',
    1 => '###User.lastname###',
  ),
)

Jedoch wird folgendes placeholder_array zurückgegeben:;
Code:
array(
    (int) 0 => array(
        (int) 0 => '###User.firstname###,
Wir sind sehr nett wie ###User.lastname###'
    )
)

Ich finde hier einfach den Fehler nicht :(

Danke und Gruß, Kalito
 
Dies sollte eigentlich bei dem String

Code:
###User.firstname###,
Wir sind sehr nett wie ###User.lastname###

folgendes Ergebnis auswerfen

Tut es auch. :)

PHP:
<?php

$mail_body = '###User.firstname###,
Wir sind sehr nett wie ###User.lastname###';

$placeholder_array = array();

preg_match_all("/###.+###/" , $mail_body, $placeholder_array);

var_dump($placeholder_array);

//array(1) {
//  [0]=>
//  array(2) {
//    [0]=>
//    string(20) "###User.firstname###"
//    [1]=>
//    string(19) "###User.lastname###"
//  }
//}

Aber nur, weil du den s-Patternmodifikator nicht gesetzt hast. Ohne den matcht "." keine Zeilenumbrüche.

- http://php.net/manual/en/reference.pcre.pattern.modifiers.php

Ein Problem gibt es aber, wenn zwei Platzhalter in einer Zeile stehen, denn:

Reguläre Ausdrücke sind standardmäßig greedy und versuchen das längstmögliche Match zu finden, das die Regeln erfüllt. Du kannst den Quantifikator ("+") auf ungreedy stellen, indem du ein "?" anfügst.

PHP:
<?php

$mail_body = '###User.firstname###, Wir sind sehr nett wie ###User.lastname###';

$placeholder_array = array();

preg_match_all("/###.+?###/" , $mail_body, $placeholder_array);

var_dump($placeholder_array);

//array(1) {
//  [0]=>
//  array(2) {
//    [0]=>
//    string(20) "###User.firstname###"
//    [1]=>
//    string(19) "###User.lastname###"
//  }
//}

- http://php.net/manual/en/regexp.reference.repetition.php
 
Zurück