mike: regex | string durchsuchen und aufsplitten

Hallo Gemeinde!

Ich habe ein kleines Regex-Perl Problem.

Ich habe einen string (z.B. 1|test|ix|2|test|et|3|test|sfdf);
ich will den String mit hilfe einer Schleife und der Macht der Regex durchsuchen splitten und in ein Array schreiben >> $Array[0] = 1|test|ix
                             [1] = 2|test|et
                             [2] = 3|test|sfdf

Ich hab aber im moment ein ziemliches BlackOut und mir fällt beim besten willen kein Lösungsansatz ein. Habt ihr eine Ahnung mit welchem regex ich dieses Problem bewerkstelligen könnte?

Danke für jede hilfe

mike

  1. Hi,

    Ich habe einen string (z.B. 1|test|ix|2|test|et|3|test|sfdf);
    ich will den String mit hilfe einer Schleife und der Macht der Regex durchsuchen splitten und in ein Array schreiben >> $Array[0] = 1|test|ix
                                 [1] = 2|test|et
                                 [2] = 3|test|sfdf

    Das Schema, das du suchst, müsste denke ich so aussehen:

    $muster = '\d|[a-zA-Z]{1,}|[a-zA-Z]{1,}';

    Nun könntest du mit Klammerung Teilausdrücke extrahieren:

    my $test = "1|test|ix|2|test|et|3|test|sfdf";
    $test =~ /^($muster)|($muster)|($muster)$/;
    my @ergebnis = ($1, $2, $3);

    Ich denke, dass es theoretisch so geht (habe keine Möglichkeit zum Testen hier), wenn ich dein Anliegen richtig verstanden habe.

    Viele Grüße
    Torsten

    1. Hi Torsten

      my $test = "1|test|ix|2|test|et|3|test|sfdf";
      $test =~ /^($muster)|($muster)|($muster)$/;

      Dieses Muster ist mir schon klar aber ich brauche ein Suchmuster das ich in eine Schleife einbauen kann und somit beliebig viele gleiche muster in einem String finden und in ein Array extrahiere kann.

      my @ergebnis = ($1, $2, $3);

      Ich denke, dass es theoretisch so geht (habe keine Möglichkeit zum Testen hier), wenn ich dein Anliegen richtig verstanden habe.

      An sich schon aber ....

      ich habe die Variable $_ in dieser ist ein String bestehend aus verschieden vielen kombinationen des zu extrahierenden musters. Das ganze steht in einer while(DATEI) schleife. Jetzt brauch ich ein regex muster das mir den String durchsucht dann beim ersten muster stehen bleibt und es extrahiert dann weitersucht und wieder das nächste gefundene muster extrahiert etc. etc..
      Beim nächsten durchlauf der while schleife kommt wieder ein String mit diesem Muster daher bis zum ende des files.

      Hat vielleicht jemand eine Ahnung wie das funktionieren könnte?

      gruß mike

  2. hi mike

    probier das mal

    push @array, $string=~/\d|.+?|.+?/g;

    ich habs nicht getestet mehr dazu findest du hier

    [link] http://selfhtml.teamone.de/cgiperl/sprache/regexpr.htm#allgemeines [/link]

    bis bis roman

    1. hi roman

      Danke für der Lösungsansatz mit einiges an umformung und noch ein bischen feinschliff hat es wunderbar funktioniert!

      gruß mike

      1. hi mike

        Schreib doch mal was du geänderst hast ich will doch aus meinen fehlern lernen :-)

        bis bis roman

        1. Hallo

          Schreib doch mal was du geänderst hast ich will doch aus meinen fehlern lernen :-)

          Das prinzip ist gleich geblieben ich habe nur das Suchmuster meinen Bedürfnissen angepasst

          push @array, $_ =~/(([A-Z]?[0-9]/[0-9]?[0-9]);:\s:([0-9]?[0-9])[,;:\s]([0-9]*
          [0-9]+)*,;:\s*,;:\s*[,;:\s])/g;

          gruß mike

          1. hallo mike

            push @array, $_ =~/(([A-Z]?[0-9]/[0-9]?[0-9]);:\s:([0-9]?[0-9])[,;:\s]([0-9]*
            [0-9]+)*,;:\s*,;:\s*[,;:\s])/g;

            ohne das ich dein suchmuster kenne behaupte ich mal das geht auch etwas eleganter aber erstmal ist es ja wichtig das es überhaupt klappt.

            bis bis roman

      2. Hi,

        hm, irgendwie hatte ich dich wohl nicht richtig verstanden, aber da du jetzt die Lösung gefunden hast, wäre es schön, wenn du sie noch als Ergänzung für die Nachwelt posten würdest.

        Viele Grüße
        Torsten