kraft hannes: regulärer ausdruck

hallo leute !

trotzdem ich eigentlich schon lange mit perl rummache habe ich die regulären audrücke sträflich vernachlässigt . . .

. . . und kann jetzt einen ebensolchen leider nicht auseinanderdefinieren da mein wissen hier leider nicht vorhanden ist.

vielleicht kann einer der geschätzten forumsteilnehmer mir hier einen kleinen tip geben :)

zum problem:

in jedem perl script verwende ich seit undenklichen zeiten drei
zeilen die ich nie verstanden habe:

$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/<!--(.\n)*-->//g;

. . . ganz am anfang wenn ich die daten die so daherkommen abfrage wandle ich hier die ganze sache in eine lesbares format um . . .

  • bis heute hats tadellos funktioniert - aber jetzt stelle ich fest dass bei einem gesendeten string der eine gewisse länge überschreitet die _dritte_ zeile einfach den ganzen übergebenen string löscht (die ersten beiden zeilen arbeiten korrekt)

leider kann ich aus den ganzen perl büchern die hier bei mir herumlieren nicht rauslesen was denn die dritte zeile genau tut - ungefähr kann ich schon was raten aber das ist zu wenig

mich würde also brennend interessieren was hier geschieht

vielen dank für die hilfe

servus
hannes

  1. Sup!

    »»  $value =~ s/<!--(.\n)*-->//g;

    IMHO ersetzt dieser reguläre Ausdruck alle Kommentare durch gar nichts, d.h. löscht sie.
    Warum das irgendwelche Strings ab einer gewissen Länge zerlegen sollte, die keine Kommentare enthalten, weiss ich indes nicht.

    Gruesse,

    <img src="http://outpost.purespace.de/webdesign.jpg" alt="">

    Bio

    1. hi ho

      »»  $value =~ s/<!--(.\n)*-->//g;
      IMHO ersetzt dieser reguläre Ausdruck alle Kommentare durch gar nichts, d.h. löscht sie.

      eigentlich ist dieser ausdruck, den ich allerdings in diesem zusammenhang auch als unsinnig empfinde, wenn er auf html-daten angewandt wird

      • zu gierig.
        Er wuerde zum beispiel auch sowas loeschen:
        <!--Kommentar-->kein kommentar<!--nochn kommentar-->

      also, wenn ueberhaupt, dann:

      $value =~ s/<!--(.\n)*?-->//g;
                             ^

      (nicht gierig machen des sterns)

      oder halt

      $value =~ s/<!--.*?-->//gs;

      (durch /s faellt in den punkt auch \n rein)

      cua

      n.d.p.

      1. Sup!

        Stimmt ja - Perl ist ja normalerweise immer "greedy" - gar nicht dran gedacht...

        Gruesse,

        Bio

  2. Hi,

    in jedem perl script verwende ich seit undenklichen zeiten drei
    zeilen die ich nie verstanden habe:

    Du solltest sie nicht weiterverwenden, da sie fehlerhaft sind. Ein Problem hast Du schon bemerkt, Bio hat es Dir erklärt, die Zeile ist schlicht und einfach Blödsinn - andere Probleme fallen Dir erst später auf, und dann sitzt Du da und debuggst Dich zu Tode. Benutze:

    #!/usr/bin/perl -w
    use strict;
    use CGI ':standard';

    und greife anschließend auf param('name') zu, um den Wert von <input name="name"> zu erhalten. Den _gesamten_ Klumpatsch mit read(STDIN) usw. kannst Du komplett in die Tonne treten. Vergleiche auch

    perldoc CGI

    • bis heute hats tadellos funktioniert -

    Das ist der Kernsatz. Beim nächsten <select multiple> funktioniert's schon nicht mehr.

    leider kann ich aus den ganzen perl büchern die hier bei mir herumlieren nicht rauslesen was denn die dritte zeile genau tut - ungefähr kann ich schon was raten aber das ist zu wenig

    Das steht alles in

    perldoc perlre

    Cheatah

    1. vielen dank !!

      für eure hilfe . . .

      • ich glaube dass ich schon früher auf diverse "use _irgendwas_" zurückgreifen hätte sollen :)

      vorerst halte ich mich an Cheatah *danke* und werde die
      nächste zeit wohl mit dem use CGI ':standard'; weitermachen . . .

      in diesen perldoc CGI und perldoc perlre stehen ja die tollsten
      sachen drin (leider in englisch *g*) aber es wird schon

      nochmals danke

      . . . wenn ich mal irgendwie helfen kann lasst es mich wissen

      servus
      hannes