SorgenKind Mech: / RegEx: Ich werde es nie kapieren ;(

huhu liebe Forengemeinde

ich scheitere abermals an einem regulären ausdruck ...

ich versuche aktuell ein template-system zu basteln
die templates enthalten beispielsweise folgendes:

  
<h1>XXX 2 - Login</h1><br />  
Bitte Benutzer auswählen:<br />  
<table>  
	<tr>  
		<th>MNr</th>  
		<th>Benutzer</th>  
		<th>Aufgaben (fällig)</th>  
		<th>aktueller Arbeitsschritt</th>  
	</tr>  
<!-- [GL:USERLIST] !-->  
<!-- [ABTEILUNG] !-->  
	<tr>  
		<th colspan=4>{ABTEILUNG}</th>  
	</tr>  
<!-- [/ABTEILUNG] !-->  
<!-- [BENUTZER] !-->  
	<tr>  
		<td>{MNR}</td>  
		<td>{BENUTZER}</td>  
		<td>{AUFGABEN}</td>  
		<td>{ARBEITSSCHRITT}</td>  
	</tr>  
<!-- [/BENUTZER] !-->  
<!-- [/GL:USERLIST] !-->  
</table>  

nun versuche ich den inhalt zwischen GL:USERLIST zu filtern:

$regex  = '/<!-- [GL:USERLIST] !-->(.*?)<!-- [\GL:USERLIST] !-->/';

das ist zumindest mein aktueller versuch ... ich weiß, ihr seht den/die fehler sicher auf anhieb, aber ich steig da einfach nicht durch, kann mir jemand auf die sprünge helfen? danke ;)

  1. Hallo,

    ich scheitere abermals an einem regulären ausdruck ...

    ich glaube, du scheiterst an einem viel trivialeren Problem. ;-)

    <!-- [GL:USERLIST] !-->
    [...]
    <!-- [/GL:USERLIST] !-->

    $regex  = '/<!-- [GL:USERLIST] !-->(.*?)<!-- [\GL:USERLIST] !-->/';

    Achte auf den Unterschied zwischen normalen Forward-Slashes und Backslashes. Weiter bin ich jetzt gar nicht ins Detail gegangen.

    So long,
     Martin

    --
    Wie kann es sein, dass ich von 100 Gramm Schokolade zwei Kilo zunehme?
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    1. Hallo,

      ich scheitere abermals an einem regulären ausdruck ...

      ich glaube, du scheiterst an einem viel trivialeren Problem. ;-)

      <!-- [GL:USERLIST] !-->
      [...]
      <!-- [/GL:USERLIST] !-->

      $regex  = '/<!-- [GL:USERLIST] !-->(.*?)<!-- [\GL:USERLIST] !-->/';

      Achte auf den Unterschied zwischen normalen Forward-Slashes und Backslashes. Weiter bin ich jetzt gar nicht ins Detail gegangen.

      So long,
      Martin

      huhu martin,

      vielen dank, das ist wirklich peinlich ...
      ich hab das jetzt so geändert:

      $regex  = '/<!-- ['.$feld.'] !-->(.*?)<!-- [/'.$feld.'] !-->/';

      leider ohne erfolg, preg_match gibt immernoch keinen treffer zurück ;(

      hast du noch eine idee?

      1. Hi,

        $regex  = '/<!-- ['.$feld.'] !-->(.*?)<!-- [/'.$feld.'] !-->/';

        leider ohne erfolg, preg_match gibt immernoch keinen treffer zurück ;(

        Der Punkt matched per Default alles *außer* Zeilenumbrüchen.

        http://www.php.net/manual/en/regexp.reference.meta.php
        http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Hi,

          $regex  = '/<!-- ['.$feld.'] !-->(.*?)<!-- [/'.$feld.'] !-->/';

          leider ohne erfolg, preg_match gibt immernoch keinen treffer zurück ;(

          Der Punkt matched per Default alles *außer* Zeilenumbrüchen.

          http://www.php.net/manual/en/regexp.reference.meta.php
          http://www.php.net/manual/en/reference.pcre.pattern.modifiers.php

          MfG ChrisB

          ahhhhhhhhh du bist ein genie ;)

          vielen dank, moah ... solch kleinigkeiten sind immer so ärgerlich

          andererseits heißt das, dass mein ansatz schonmal garnicht so schlecht war! (wenigstens ein teilerfolg mit meinem ewigen erzfeind dem regulären ausdruck ;)

          vielen dank nochmal!

          $regex  = '/<!-- ['.$feld.'] !-->(.*?)<!-- [/'.$feld.'] !-->/s';

          1. Moin,

            Der Punkt matched per Default alles *außer* Zeilenumbrüchen.
            ahhhhhhhhh du bist ein genie ;)

            Das mag sein, aber du hast seinen Hinweis sicherlich falsch verstanden. Wenn wir nicht alle Zeichen, die wir brauchen erlauben können, dann schließen wir doch einfach das Zeichen aus, welches nicht erlaubt ist:

            $regex  = '/<!-- ['.$feld.'] !-->(.*?)<!-- [/'.$feld.'] !-->/s';

            $regex = '/<!-- ['.$feld.'] !-->([^<]*)<!-- [/'.$feld.'] !-->/s';
            Wie du aber siehst wird das nicht funktionieren, wenn HTML-Code in diesen Areas steht. Daher empfehle ich, das nicht über reguläre Ausdrücke zu handeln (hab ich selbst schon versucht und bin gescheitert), sondern wirklich einfach eine sequentielle Abarbeitung der Zeilen durchzuführen.

            Grüße Marco