Chris Weber: Teile eines Strings entfernen

Hallo,

sagen wir mal ich haette einen String in einer Variable gespeichert:

$wert = "hallo=wie?geht+s-denn%so";

Die ganzen Zeichen sind vielleicht ein wenig uebertrieben, aber nur fuer alle Faelle.  Wie kann ich mit Perl Teile von String entfernen, vorne sowie hinten ?  Zum Beispiel alles vor dem "=" und alles nach dem "%" soll weg.  Wie geht das ?

Danke

  1. Hallo,

    sagen wir mal ich haette einen String in einer Variable gespeichert:

    $wert = "hallo=wie?geht+s-denn%so";

    Die ganzen Zeichen sind vielleicht ein wenig uebertrieben, aber nur fuer alle Faelle.  Wie kann ich mit Perl Teile von String entfernen, vorne sowie hinten ?  Zum Beispiel alles vor dem "=" und alles nach dem "%" soll weg.  Wie geht das ?

    Wenn du alles nach % weghaben willst, solltest du es mit substr und index machen. Wenn du alle % aus dem String raus haben willst, kanns du es mit $String =~ s/%//g; machen.

  2. Hi,

    sagen wir mal ich haette einen String in einer Variable gespeichert:

    $wert = "hallo=wie?geht+s-denn%so";

    Die ganzen Zeichen sind vielleicht ein wenig uebertrieben, aber nur fuer alle Faelle.  Wie kann ich mit Perl Teile von String entfernen, vorne sowie hinten ?  Zum Beispiel alles vor dem "=" und alles nach dem "%" soll weg.  Wie geht das ?

    alles vor dem "=" (einschl.):
    $wert =~ s/^.*=//;

    Alles nach dem "%" (einschl.):
    $wert =~ s/%.*$//;

    Alles bis auf das zwischen "=" und "%":
    $wert =~ s/^.*=(.*)%.*$/$1/;

    Stichwort: Reguläre Ausdrücke. Du kannst auch z.B. mit ($name, $inhalt) = split(/=/,$wert); den String aufspalten, so daß $name="hallo" und $inhalt="wie?geht+s-denn%so"

    Cheatah

    1. Hallo!

      Stichwort: greedy - das Sternchen ist ein Vielfraß ...

      $wert = "hallo=wie?geht+s-denn%so";

      Anderes Bsp: $wert = "hallo=wie?geht+=s-euch%allen!denn%so";

      alles vor dem "=" (einschl.):
      $wert =~ s/^.*=//;

      Wird zu "s-euch%allen!denn%so"

      Alles nach dem "%" (einschl.):
      $wert =~ s/%.*$//;

      Wird zu "s-euch"

      Hinter * ein Fragezeichen setzen sollte dieses Verhalten ändern (falls gewünscht)

      Alles bis auf das zwischen "=" und "%":
      $wert =~ s/^.*=(.*)%.*$/$1/;

      $wert =~ s/^.*?(.*)%.*?$/$1/;

      Jörk

      1. Hi,

        $wert = "hallo=wie?geht+s-denn%so";

        Anderes Bsp: $wert = "hallo=wie?geht+=s-euch%allen!denn%so";

        okay, wenn das möglich ist muß man natürlich leicht korrigieren.

        alles vor dem "=" (einschl.):
        $wert =~ s/^.*=//;

        Wird zu "s-euch%allen!denn%so"

        $wert =~ s/^.*?=//;

        Alles nach dem "%" (einschl.):
        $wert =~ s/%.*$//;

        Wird zu "s-euch"

        Ebenfalls ein ? hinter dem Sternchen einfügen.

        Hinter * ein Fragezeichen setzen sollte dieses Verhalten ändern (falls gewünscht)

        Genau :-)

        Zum split-Befehl:
        ($name, $inhalt) = split(/=/,$wert,2);
        sorgt dafür, daß nur am ersten "=" aufgesplittet wird.

        Cheatah