kai: Regulärer Ausdruck in Array speichern

Hallo,
folgende Problemstellung:
Ein vorgegebener String:

$string=' Produkt1 id="1234" Produkt1 id="9999" Produkt2 id="8888" usw..';

ist gegeben und nun möchte ich alle IDs des Produkt1 in ein Array speichern.
Hatte erst an Substitution gedacht, aber dieser liefert mir in diesem Fall nur die Anzahl: @array=$string=~s/(Produkt1 id" )(\d)/$2/g;

2.Möglichkeit wäre, alle Produkt1 Daten in einen seperaten String oder Datei zu schreiben und dann alle IDs zu filtern.

Hat von euch jmd eine "schickere" Lösung?
Danke im Vorraus

  1. Ein vorgegebener String:
       $string=' Produkt1 id="1234" Produkt1 id="9999" Produkt2 id="8888" usw..';
    ist gegeben und nun möchte ich alle IDs des Produkt1 in ein Array speichern.
    Hatte erst an Substitution gedacht, aber dieser liefert mir in diesem Fall nur die Anzahl:

    @array=$string=~s/(Produkt1 id" )(\d)/$2/g;
    -----------------------------------^^ ??

    2.Möglichkeit wäre, alle Produkt1 Daten in einen seperaten String oder Datei zu schreiben und dann alle IDs zu filtern.

    Hat von euch jmd eine "schickere" Lösung?

    Du willst hier zwei Schritte in einem tun.
    Ich denke aber ein bisschen anders...

    my @products = qw(x y z);  
    my $parameter= qr/id|somepar/;  
    my %prodhash;  
      
    foreach my $product ( @products ){  
      while(  
         $string=~ s/*  
            ($product) \s  
            ($parameter)  
            "  ([^"]+) "  
          /$3/gx ){  
        push @{ $prodhash{$1}{$2} }, $3;  
      }  
    }
    

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Danke für eure Antworten!
      Habe es mittlerweile über 2 reg Ausdrücke gelöst:
      @nummern=$string=~m/Produkt1 id="\d+/gs;
      $i=0;
      foreach (@nummern)
      {
      $nummern[$i]=~s/(Produkt1 id=")(\d+)/$2/g;
      $i++;
      }
      Funktioniert auch ;)

  2. hi,

    Hat von euch jmd eine "schickere" Lösung?

    split();

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hat von euch jmd eine "schickere" Lösung?
      split();

      sleep 10000;
      use verbose;

      mfg Beat

      --
      ><o(((°>           ><o(((°>
         <°)))o><                     ><o(((°>o
      Der Valigator leibt diese Fische
      1. Hat von euch jmd eine "schickere" Lösung?
        split();

        sleep 10000;
        use verbose;

        Ok, wenns unbedingt sein muss: /x

        Hotti

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.