PHP RegEx: Unterstützung beim Zusammenbau

Blackbenji

Lieutenant
Registriert
Nov. 2009
Beiträge
565
Hallo,

ich bräuchte etwas Hilfe beim Zusammenbau eines RegEx:

PHP:
<!--- start:block1 --->
${var1}
<!--- end:block1 --->

Was soll gemacht werden?

Innerhalb eines Templates kann ein beliebiger Block gestartet werden, beginnend durch start:* und endet mit end:*
Nur wenn beides Positiv ist soll die darin enthaltene ${var1} ausgegeben werden.

Ich hatte hier schon mein Glück versucht
http://txt2re.com/index-php.php3?s=%3C!---%20start:block1%20---%3E${var1}%3C!---%20end:block1%20---%3E&-1

Leider wird hier nur nach einem der beiden Teile gesucht.
 
@Yuuri: danke!

habe es ein wenig geändert und sieht nun so aus:

PHP:
$txt='${start:abc}Hallo${end:abc}';

if ($c=preg_match_all ('/\${start:(\w+)}(.*?)\${end:(\1)}/im', $txt, $matches))
{
    var_dump($matches);
}

Wenn ich jedoch meine $txt so ändere:
PHP:
$txt='${start:abc}
Hallo
${end:abc}';
geht es nicht mehr?

Das Problem ist, es soll halt für ein Template genutzt werden, wo der user Zeilenumbrüche/Leerzeichen selber bestimmt.
Kann man das noch einarbeiten?
 
Klar, häng den s Modifier an.
http://www.php.net/manual/de/reference.pcre.pattern.modifiers.php schrieb:
s (PCRE_DOTALL)
Wenn dieser Modifikator gesetzt ist, passt das Metazeichen Punkt im Suchmuster auf alle Zeichen inklusive Zeilenumbrüche. Ohne diesen Modifikator sind Zeilenumbrüche ausgeschlossen. Dieser Modifikator entspricht dem Perl-Modifikator /s. Unabhängig davon, ob dieser Modifikator gesetzt ist, passt eine verneinende Zeichenklasse wie z.B. [^a] immer auf einen Zeilenumbruch.
Sonst müsstest du eben anstatt dem Punkt [.\r\n] o.ä. nutzen, damit Zeilenumbrüche ebenso gematcht werden.
 
Zurück
Oben