piep: String auf Zeichen prüfen!

Ich hab einen ganz normalen String in einer Variablen namens $test.
Ich möchte dazu eine Abfrage erstellen mit folgenden Bedingungen:

  1. Es darf in diesem String nur genau ein "E" vorkommen, nicht mehr und nicht weniger.
  2. Es muss nach dem "E" irgendwo ein "." kommen, allerdings nicht direkt nach dem "E".

Sprich die korrekt Eingabe müsste so aussehen:  AAAEBBB.EEE
Sollten die beiden Bedingungen (siehe oben) nicht erfüllt sein, so soll 'false' zurückgegeben werden, ansonsten halt ein 'true'.

Kann mir jemand die If-Bedingung oder eine Lösung dafür sagen?
Ich hab's schon mit den 'regluar expressions' probiert, bin aber nicht zu einer 100% Lösung gekommen.

    1. Es darf in diesem String nur genau ein "E" vorkommen, nicht mehr und nicht weniger.
    2. Es muss nach dem "E" irgendwo ein "." kommen, allerdings nicht direkt nach dem "E".

    Sprich die korrekt Eingabe müsste so aussehen:  AAAEBBB.EEE

    Das widerspricht aber der 1. Bedingung, oder?

    falls nicht, ist das eine Lösung:
    sub check
    {
        my $s = shift;
        my $regEx = 'E[^E]*.';
        if($s =~ /$regEx/)
        {
            print "$s ist ok.\n";
        }
        else
        {
            print "$s ist nicht ok. \n";
        }
    }

    Struppi.

    1. Das widerspricht aber der 1. Bedingung, oder?
      falls nicht, ist das eine Lösung:
      sub check
      {
          my $s = shift;
          my $regEx = 'E[^E]*.';
          if($s =~ /$regEx/)
          {...

      Achja, sicher ist das widersprüchlich. *argh* Ich dumm!!!!  :)
      Ok, ne korrekte Eingabe wäre natürlich "aaaEccc.zzz".

      Wenn ich deine Funktion benutze, dann hab ich immer noch folgendes Problem:

      1. Der String kann auch mehrere "E" enthalten! --> Darf nicht sein
      2. Der Punkt kann auch direkt hinter dem "E" stehen! --> Darf auch nicht sein
      1. Achja, sicher ist das widersprüchlich. *argh* Ich dumm!!!!  :)
        Ok, ne korrekte Eingabe wäre natürlich "aaaEccc.zzz".

        Wenn ich deine Funktion benutze, dann hab ich immer noch folgendes Problem:

        1. Der String kann auch mehrere "E" enthalten! --> Darf nicht sein
        2. Der Punkt kann auch direkt hinter dem "E" stehen! --> Darf auch nicht sein

        sub check
        {
            $_ = shift;
            my @t;
            if(/E[^E]+./ && (@t = /E/g) == 1)
            {
                print "$s ist ok.\n";
            }
            else
            {
                print "$s ist nicht ok.(@t) \n";
            }
        }

        wobei ich glaube, das die Prüfung auf mehrere 'E's auch einfacher ginge.

        Struppi.

        1. Sorry, aber jetzt blick ich schon nicht mehr durch.
          Warum "$_ = shift"?
          und warum "my @;"?
          Wo ist denn $s?

          1. Sorry, aber jetzt blick ich schon nicht mehr durch.
            Warum "$_ = shift"?

            spart Tipparbeit.

            und warum "my @;"?

            da steht my @t;

            das zählt die 'E's

            Wo ist denn $s?

            in $_

            Struppi.

            1. Funzt gut!
              big, thx

              1. Funzt gut!

                iiih, echt?
                tut mir leid, das war nicht meine Absicht.

                struppi.

        2. Grade in der Perl NG eine Variante gesehen wie es einfacher geht.

          print check('aaaEccc.zzz') ? 'ok' : ' nicht ok';
          print check('aaaEccc.zzEEz') ? 'ok' : ' nicht ok';

          sub check
          {
              $_ = shift;
              return (/E[^E]+./ && (() = /E/g) == 1);
          }

          Die Funktion check gibt 1 wenn die Prüfung wahr ist oder undef wenn sie falsch ist zurück.

          Struppi.

  1. Mahlzeit,

    meine Lösung steht im anderen Forum ;-)

    Viele Grüße, Rolf

    --
    SELFforum - Das Tor zur Welt!
    Theoretiker: Wie kommt das Kupfer in die Leitung?
    Praktiker: Wie lege ich die Leitung von A nach B?