LanX: Anzahl der Matches eines RegExps ermitteln

Hallo Leute

Anfaengerfrage:
Ich will ausgeben wie oft ein Suchausdruck in einem String vorkommt,
hab bisher aber nichts eleganteres gefunden als erst alle Matches
einem Array zuzuweisen, die Laenge des Arrays zu ermitteln und dieses
dann auszugeben, dass muss doch auch eleganter gehen oder???

so gehts unelegant:
  @POSTINGS=/($POSTING_START)/gs;
  $ANZ_POSTINGS=@POSTINGS;
  print "$THEMA postings:$ANZ_POSTINGS\n";

waehrend das folgende nur 1 fuer "Suche erfolgreich" meldet
  $ANZ_POSTINGS=/($POSTING_START)/gs;

Danke im voraus fuer die Hilfe

Tschuess
Rolf

  1. Moin,

    Ich will ausgeben wie oft ein Suchausdruck in einem String vorkommt,

    so gehts unelegant:
      @POSTINGS=;
      $ANZ_POSTINGS=@POSTINGS;

    my $anzahl = 0;
    $anzahl++ while (/$POSTING_START/gs);

    oder

    my $anzahl = () = /$POSTING_START/gs;

    etc. (TIMTOWTDI)

    btw:
    * Variablennamen in Perl werden ueblicherweise klein geschrieben.
    * ich hoffe, dein zu durchsuchender String befindet sich in $_
    * du willst wahrscheinlich /\Q$POSTING_START/ schreiben (perldoc perlre)

    Viele Gruesse,

    n.d.p.

    1. Hi n.d., Cheatah

      my $anzahl = () = /$POSTING_START/gs;

      Exquisit! Sowas hab ich gesucht! In welchem perldoc steht sowas ;)?
      Wird dabei $_ ueberschrieben???

      etc. (TIMTOWTDI)

      ehm ... schlag ich nach ... moment Google sagt ...

      "There Is More Than One Way To Do It."

      Logisch, wollt halt klueger werden ;-)

      * Variablennamen in Perl werden ueblicherweise klein geschrieben.

      Zu viele Sprachen versauen den Stil, ich glaub das stammt noch aus
      meinen GFA-Basic Zeiten, ich merks mir!

      * ich hoffe, dein zu durchsuchender String befindet sich in $_

      Yes!

      * du willst wahrscheinlich /\Q$POSTING_START/ schreiben (perldoc perlre)

      Hmmm haste recht, defensiv kann nicht schaden ;)

      Viele Gruesse,

      1. Hi,

        my $anzahl = () = /$POSTING_START/gs;

        Exquisit! Sowas hab ich gesucht! In welchem perldoc steht sowas ;)?

        hm, perldoc perlref würde ich tippen. Stichwort "anonymous array".

        Wird dabei $_ ueberschrieben???

        Probier's aus!

        $_ = 'test'
        my $anzahl = () = /$POSTING_START/gs;
        print $_;

        etc. (TIMTOWTDI)

        "There Is More Than One Way To Do It."

        Das ist übrigens _der_ Grundsatz von Perl!

        if ($a != $b) { &tuwas; }
        unless ($a == $b) { &tuwas; }
        &tuwas if ($a != $b);
        &tuwas unless ($a == $b);
        ($a != $b) && &tuwas;
        ...

        Der Entwickler von Perl ist übrigens in der Linguistik zu Hause - Perl läßt sich daher schreiben, wie man spricht! :-)

        * Variablennamen in Perl werden ueblicherweise klein geschrieben.
        Zu viele Sprachen versauen den Stil, ich glaub das stammt noch aus
        meinen GFA-Basic Zeiten, ich merks mir!

        Noch mal die Empfehlung: perldoc perlstyle

        Man muß nicht mit allem davon einverstanden sein (mein Stil weicht auch davon ab), aber diese Dokuseite enthält doch einige sehr nützliche Grundsätze, die vor allem das Verstehen _fremder_[1] Codes vereinfacht.

        [1] Dazu gehören auch die eigenen - oft schon nach wenigen Tagen ;-)

        Cheatah

        1. Hi Cheatah,

          probiers aus

          Ja, ich kenn die Antwort schon ... ;)

          [1] Dazu gehören auch die eigenen - oft schon nach wenigen Tagen ;-)

          Seufz, wem sagste das!

          Bye Rolf

          [1] Tarzans Affe??? ;) Ich weiss es wirklich nicht, und google schmeisst bei
          "Cheatah Tarzan" nur so komische Witzseiten aus ... *g*

          1. Hi allerseits

            Der vollstaendigkeit halber noch ne Variante

            $anz_postings= split(/\Q$posting_start/gs);

            Viele GrueBe
            Rolf

          2. Hi,

            [1] Tarzans Affe??? ;)

            nein, Tarzans Schimpanse(! *g*) Cheetah wurde nach dem englischen Wort für "Gepard" benannt.

            Cheatah

            1. Hoi

              nein, Tarzans Schimpanse(! *g*) Cheetah wurde nach dem englischen Wort für "Gepard" benannt.

              Aha? Und wie fuehlst du dich gerade so, als Steppenmieze oder
              Banaenchefresser *g* ?

              Schoenen abend noch
              Rolf

              1. Hi,

                nein, Tarzans Schimpanse(! *g*) Cheetah wurde nach dem englischen Wort für "Gepard" benannt.

                ^

                Aha? Und wie fuehlst du dich gerade so, als Steppenmieze oder
                Banaenchefresser *g* ?

                weder noch - beachte die Schreibweisen ;-)

                Cheatah

                1. Hoi Cheatah

                  weder noch - beachte die Schreibweisen ;-)

                  Soso dann also eher Cheater (weniger zooologisch und mehr
                  verarschologisch, gell :)

                  Bye bye
                  Rolf

                  1. Hi,

                    Soso dann also eher Cheater (weniger zooologisch und mehr
                    verarschologisch, gell :)

                    "Cheatah" ist frühschulisch für "Schnell-Einen-Nick-Wähler" ;-)

                    Cheatah

                    1. Moin!

                      "Cheatah" ist frühschulisch für "Schnell-Einen-Nick-Wähler" ;-)

                      So so. "Calocybe" ist fruehschuhlisch fuer "Mit-Bedacht-Einen-Nick-Waehl-aber-letztlich-doch-nichts-richtiges-Einfallender". Vielleicht sollten wir ein entsprechendes Dictionary kreieren.

                      So long

        2. Moin,

          Der Entwickler von Perl ist übrigens in der Linguistik zu Hause - Perl läßt sich daher schreiben, wie man spricht! :-)

          Und was heisst denn "Haste ma 'ne Mark als Gegenleistung für die tolle Antwort?" auf perlisch ?

          Viele Grüße

          Swen,
          auch mal gern was auf perlisch als Signatur haben wollend

          1. Moin Swen,

            Und was heisst denn "Haste ma 'ne Mark als Gegenleistung für die tolle Antwort?" auf perlisch ?

            #!/usr/bin/perl -w -- n.d.p.
            use strict; sub Frage($){(7*
            3<<1).shift}sub lautet($){q{
            }}

            die Frage lautet "Haste mal 'nen Euro?"
            __END__

            Viele Gruesse,

            n.d.p., angebend ;-)
            --
            print "Just Another Perl Hacker";

            1. Hi n.d.,

              $a=" D SS a  4 UE X I T";$b="h5S1 VA S H.N  T  EA5 E N9";
              $c=" T E 24  C A  M5L  3BA H M";$d="  A   1ERX 2 I4  S ";
              sub Antwort($){$b^$c.",".($a^$d)."? ;-)".shift}sub lautet($){q{
              }}

              die Antwort lautet "Nein, nur Deutsche Mark"
              __END__

              Greetz
               Kess *kann das auch ;)*
              --
              print "Not Another Perl Hacker";

  2. Hi,

    so gehts unelegant:

    in der Tat - allerdings aus einem anderen Grund, den Du in

    perldoc perlstyle

    nachlesen kannst (=solltest). Ich beziehe mich auf die Wahl Deiner Variablennamen...

    $ANZ_POSTINGS=/($POSTING_START)/gs;

    Du willst also einen Einzeiler?

    #!/usr/bin/perl -w
    use strict;
    my $text = 'abacadaeafagahaiaj';
    print scalar (my @array = ($text =~ /a/g));

    Cheatah