21.de: RegEx -> eigenen "Tag" auswerten

Hallo Freunde,

es ist eigentlich nicht meine Art, als Entwickler andere Kollegen zu befragen wenn ich nicht selbst zumindest ein paar Stunden investigativ tätig geworden bin - aber die Zeit drängt, ich stehe unter Stress, und da bin ich dankbar für jede Hilfe... ;-)

Ich benötige wirklich DRINGEND eine kleine Lösung zu folgender Anfoderung:

Ich habe folgende Tags in einem HTML-Snippet:
<!--FUNC:ADVIEW>anything<!--/FUNC:ADVIEW-->

Ich möchte nun "anything" in einer eigenen Variable haben, und dann den kompletten Bereich von <!-- bis zum zweiten --> gegen einen anderen String austauschen. Es gibt allerdings noch mehr eigene Tags, wie z.B. <!--DATA:USER-->, diese dürfen von dem Eingriff nicht berührt werden.

Ich will also nur den o.g. Bereich gegen einen neuen String austauschen, nachdem ich den umschlossenen Bereich ausgelesen habe...

Ich nehme mal an, das sich das mit einem schnuckligen regulären Ausdruck schnell erledigen läßt, bin aber leider kein geek auf diesem Gebiet, und würde für die Ausarbeitung wahrscheinlich zu lange brauchen - und aus terminlichen Gründen muß ich mein Script am Wochenende fertigstellen.

PLEASE HELP! Vielen lieben Dank schonmal im voraus!

Cheers!
Christian

  1. Hallo Christian,

    versuche mal folgendes Codebeispiel:
    ----------

    HTML-Text

    my $html = 'Beliebiger anderer Text <!--FUNC:ADVIEW>anything<!--/FUNC:ADVIEW--> Beliebiger anderer Text';

    Ersetz-Text

    my $ersetz = 'Hier stehe jetzt ich';

    HTML-Text bearbeiten

    $html =~ s/<!--FUNC:ADVIEW>(.*?)<!--/FUNC:ADVIEW-->/$ersetz/g;
    ----------

    Jetzt hast Du in der Variable $html den Bereich <!--FUNC:ADVIEW>anything<!--/FUNC:ADVIEW--> ersetzt durch deinen Ersetz-Text und in der Variablen $1 den Wert 'anything'.

    Ich hoffe Dir dein Wochenende gerettet zu haben ;)

    Gruß
    Helmut Weber

    --
    -------------------------------------------
    Mode ist eine Variable, Stil eine Konstante
    1. Hi Helmut,

      dein Vorschlag ist fantastisch! Allerdings fehlt noch eine winzige Änderung - mag sein das ich mich da nicht klar geäußert hatte:

      Ich muß zuerst "anything" auslesen, und mit dem daraus erhaltenen Wert den neuen String generieren. "anything" wird ein keyword sein, auf dessen Basis der Invocation-Code eines Adserver generiert wird, der dann eingefügt werden soll.

      Ich brauche also 2 Schritte...

      Wäre supernett, wenn Du nochmal kurz helfen könntest. Die Rettung meines Wochenendes ist greifbar! ;-))

      bye,
      Christian

      HTML-Text

      my $html = 'Beliebiger anderer Text <!--FUNC:ADVIEW>anything<!--/FUNC:ADVIEW--> Beliebiger anderer Text';

      Ersetz-Text

      my $ersetz = 'Hier stehe jetzt ich';

      HTML-Text bearbeiten

      $html =~ s/<!--FUNC:ADVIEW>(.*?)<!--/FUNC:ADVIEW-->/$ersetz/g;

      1. Hallo 21.de,

        Ich muß zuerst "anything" auslesen, und mit dem daraus
        erhaltenen Wert den neuen String generieren. "anything"
        wird ein keyword sein, auf dessen Basis der
        Invocation-Code eines Adserver generiert wird, der dann
        eingefügt werden soll.

        Er hat die Loesung doch gepostet:

        Ersetz-Text

        my $ersetz = 'Hier stehe jetzt ich';

        HTML-Text bearbeiten

        $html =~ s/<!--FUNC:ADVIEW>(.*?)<!--/FUNC:ADVIEW-->/$ersetz/g;

        Du kannst problemlos einen e-Modifier anhaengen:

        $html =~ s{<!--FUNC:ADVIEW-->(.*?)<!--/FUNC:ADVIEW-->}{
          my $txt = $1;
          if($txt eq 'anything') 'text';
          else 'text1';
        }esg;

        Naehere Informationen gibts unter perldoc perlre. Die perldoc
        ist auch im Inet verfuegbar: http://www.perldoc.com/.

        Gruesse,
         CK

        --
        http://cforum.teamone.de/
        http://wishlist.tetekum.de/
        If God had meant for us to be in the Army, we would have been born with green, baggy skin.
  2. Ich benötige wirklich DRINGEND eine kleine Lösung zu folgender Anfoderung:

    Ich habe folgende Tags in einem HTML-Snippet:
    <!--FUNC:ADVIEW>anything<!--/FUNC:ADVIEW-->

    Es gibt eine Lösung, die heißt use HTML::Template. Ein Modul was diese Funktion und noch einiges mehr beinhaltet. Und eigentlich bei jeder aktuellen Perl Version beiliegt.

    Struppi.