Cruz: Regular Expression negieren

Hallo ihr Perl Wizards,

wer von euch kann mir erzählen wie ich eine Regular Expression negieren kann? Also in einem String alles finden, was NICHT auf mein Suchmuster passt.

z.B.

$string="hallo";
$string =~ m/ll/;

dann steht im $& "ll",
wie kriege ich denn stattdessen "hao" in $&?

Gruß
Cruz

  1. Hallo ihr Perl Wizards,

    wer von euch kann mir erzählen wie ich eine Regular Expression negieren kann? Also in einem String alles finden, was NICHT auf mein Suchmuster passt.

    z.B.

    $string="hallo";
    $string =~ m/ll/;

    dann steht im $& "ll",

    Hi Cruz  !

    Ich habe leider keinen Perl - Compiler "zur Hand" , d.h. ich weiss leider nicht ob es klappt aber versuche es doch
    mal mit
    $string = "Hallo ";
    $string2 = split (/ll/, $string);

    Viel Glück !

    1. versuche es doch

      mal mit
      $string = "Hallo ";
      $string2 = split (/ll/, $string);

      Viel Glück !

      Das ist leider nicht so der Hit, weil ich das Ergebnis dann in 2 Variablen habe, die ich erst zusammenfügen muss. Aber trotzdem vielen Dank!

      Cruz

      1. Das ist leider nicht so der Hit, weil ich das Ergebnis dann in 2 Variablen habe, die ich erst zusammenfügen muss. Aber trotzdem vielen Dank!

        Wo ist das Problem, Cruz?
        der Dot-Operator in Perl ist sooo schön universell.
        btw: der thread beweißt mal wieder: there is more than one way to do it ;-)

  2. $string="hallo";
    $string =~ m/ll/;

    dann steht im $& "ll",
    wie kriege ich denn stattdessen "hao" in $&?

    Aus der hohlen hand kann ich das momentan auch nicht beantworten, denn ich mache das immer so:

    $string =~ m/^(.*)(ll)(.*)$/;

    dann steht in $1 "ha"
    .. in $2 "ll"
    .. in $3 "o"

    es gibt aber auch spezialvariablen für das, was vor dem gefundenen teilstring steht und für das danach -
    <wühl> ... </wühl>
    ah! da haben wir es ja:

    $& gibt das gefundene Muster zurück
    $1,$2,$3,... enthält das Muster der 1.,2.,3.,... runden Klammer
    $+ enthält das Muster der letzten runden Klammer
    $` enthält die Zeichenkette, die vor dem gefundenen Muster steht
    $' enthält die Zeichenkette, die hinter dem gefundenen Muster steht

    ciao
      K@rl

  3. Hallo ihr Perl Wizards,

    wer von euch kann mir erzählen wie ich eine Regular Expression negieren kann? Also in einem String alles finden, was NICHT auf mein Suchmuster passt.

    diese Frage stellte ich mir auch vor kurzem (die Antwort ein paar Threads weiter unten: <56521.html>)

    mfG
    BRAND

  4. Hallo Cruz,

    z.B.

    $string="hallo";
    $string =~ m/ll/;

    dann steht im $& "ll",
    wie kriege ich denn stattdessen "hao" in $&?

    durch ersetzen erreichst du dein Ziel:
    $string = "hallo";
    if ($string =~ /ll/) {
       $string =~ s/ll//;
    }
    print $string;

    Viele Gruesse
      Kess

    1. Hallo,

      nur der Vollstaendigkeit halber: Falls du alle ll rausfiltern willst, musst du den global modifier g verwenden:

      $string = "hallo";
      if ($string =~ /ll/) {
         $string =~ s/ll//g;
      }

      Johannes