Gerli: Mit regulärem Ausdruck realisierbar

Hallo,
ich möchte, dass + oder - höchstns einmal in einem String vorkommt.
Das mehrfache direkt hintereinander habe ich ja im Griff durch [+-]{0,1}.
Aber das verhindert ja nicht, dass es weiter hinten im String noch einmal vorkommt. Wie kann ich dies prüfen?
Danke
Gerlinde

  1. Hallo Gerlinde,
    schau mal hier:

    [^+]*+?[^+]*

    Je nachdem was du mit dem String anstellen willst, könntest du das Ergebnis natürlich noch speichern (Klammern).
    Gruß

    --
    Science flies you to the moon.
    Religion flies you into buildings.
    selfcode: ie:{ fl:| br:^ va:? ls:< fo:{ rl:( n4:{ ss:} de:[ js:} ch:{ sh:) mo:? zu:)
  2. Moin,

    warum denn immer gleich mit Kanonen auf Spatzen schießen? Die normale Stringfunktion substr_count ist da doch viel besser geeignet, als RegExe.

    if (substr_count($string, '-') > 1 or substr_count($string, '+') > 1)  
        echo 'Fehler.'  
    else  
        echo 'OK.'  
    
    

    Gruß,
    Take

    1. warum denn immer gleich mit Kanonen auf Spatzen schießen?

      Zawinski :)

      Die normale Stringfunktion substr_count ist da doch viel besser geeignet, als RegExe.

      Dass es sich um PHP dreht, wissen wir doch nicht - aber weil wir grade bei PHP sind: ganz kreativ lässt sich dasselbe auch mit str_replace erreichen - man ersetzt einfach + durch irgend etwas anderes und zählt die Anzahl der ersetzungen, wurde != 1x ersetzt ...

      1. Hi,

        Die normale Stringfunktion substr_count ist da doch viel besser geeignet, als RegExe.
        Dass es sich um PHP dreht, wissen wir doch nicht - aber weil wir grade bei PHP sind: ganz kreativ lässt sich dasselbe auch mit str_replace erreichen - man ersetzt einfach + durch irgend etwas anderes und zählt die Anzahl der ersetzungen, wurde != 1x ersetzt ...

        bei PHP:
        strpos(...) === stripos(...)

        bzw. in anderen Sprachen oft indexOf(...) == lastIndexOf(...)

        wäre auch noch ne Möglichkeit ...

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        O o ostern ...
        Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
      2. Moin,

        warum denn immer gleich mit Kanonen auf Spatzen schießen?

        Zawinski :)

        Hmwa? Google führt mich zu ihm hier, aber was hat der denn hier zu bedeuten?

        Dass es sich um PHP dreht, wissen wir doch nicht - aber weil wir grade bei PHP sind: ganz kreativ lässt sich dasselbe auch mit str_replace erreichen - man ersetzt einfach + durch irgend etwas anderes und zählt die Anzahl der ersetzungen, wurde != 1x ersetzt ...

        Oh, mal wieder etwas vorschnell... Aber das Ersetzen ist doch bestimmt Performancelastiger als das reine Zählen oder? :D

        Gruß,
        Take

        1. @@Take:

          nuqneH

          Zawinski :)

          Hmwa? Google führt mich zu ihm hier, aber was hat der denn hier zu bedeuten?

          Falsche Suchmaschine. Die Zitatesammlung führt dich zu ihm.

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)
          1. Moin,

            Falsche Suchmaschine. Die Zitatesammlung führt dich zu ihm.

            Ach, der Spruch. Mit dem hatte ich ja auch schon mal Bekanntschaft...

            Gruß,
            Take

        2. Hi,

          warum denn immer gleich mit Kanonen auf Spatzen schießen?
          Zawinski :)
          Hmwa? Google führt mich zu ihm hier, aber was hat der denn hier zu bedeuten?

          "Some people, when confronted with a problem, think 'I know, I’ll use regular expressions.' Now they have two problems." --Jamie Zawinski

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          O o ostern ...
          Fachfragen per Mail sind frech, werden ignoriert. Das Forum existiert.
    2. Moin,

      warum denn immer gleich mit Kanonen auf Spatzen schießen? Die normale Stringfunktion substr_count ist da doch viel besser geeignet, als RegExe.

      if (substr_count($string, '-') > 1 or substr_count($string, '+') > 1)

      echo 'Fehler.'
      else
          echo 'OK.'

      Hi,  
      die Lösung ist ganz bestimmt nicht richtig, denn da kann + einmal vorkommen    u n d    -  einmal vorkommen.  
      Es darf aber nur + oder - einmal vorkommen!  
      Gruß  
      Gerli
      
      1. @@Gerli:

        nuqneH

        die Lösung ist ganz bestimmt nicht richtig, denn da kann + einmal vorkommen    u n d    -  einmal vorkommen.

        Es darf aber nur + oder - einmal vorkommen!

        Du kannst 1 und 1 zusammenzählen?

        if (substr_count($string, '-') + substr_count($string, '+') > 1)

        Qapla'

        --
        Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
        (Mark Twain)
        1. @Qapla

          Es darf aber nur + oder - einmal vorkommen!

          Kannst Du lesen?

          Ich habe aber nicht geschrieben "es darf nur ein +    u n d    ein - vorkommen"!

          Du kannst 1 und 1 zusammenzählen?

          Ich schon, aber Du hast wohl das Beispiel von Take nicht angeschaut!
          Wenn in seinem Beispiel ein + vorhanden ist     u n d     ein -, so ist dies dort OK.

          if (substr_count($string, '-') + substr_count($string, '+') > 1)

          Das war nicht Takes Beispiel!

          Gerlinde

          1. @@Gerli:

            nuqneH

            @Qapla

            ??

            Es darf aber nur + oder - einmal vorkommen!
            Kannst Du lesen?

            _Ich_ schon.

            Du kannst 1 und 1 zusammenzählen?
            Ich schon, aber Du hast wohl das Beispiel von Take nicht angeschaut!

            Doch. Ich habe es sogar verstanden.

            if (substr_count($string, '-') + substr_count($string, '+') > 1)
            Das war nicht Takes Beispiel!

            Du wolltest Takes Code für deinen Anwendungsfall berichtigt haben, das hab ich getan. Also was hast du dich jetzt hier zu beschweren?

            Qapla'

            --
            Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
            (Mark Twain)
            1. Du wolltest Takes Code für deinen Anwendungsfall berichtigt haben, das hab ich getan. Also was hast du dich jetzt hier zu beschweren?

              Du hast auf meine Antwort an Take:
              »»»» die Lösung ist ganz bestimmt nicht richtig, denn da kann + einmal vorkommen    u n d    -  einmal vorkommen.
              »»»» Es darf aber nur + oder - einmal vorkommen!

              geschrieben:

              Du kannst 1 und 1 zusammenzählen?

              Das ist doch eindeutig zu verstehen als Vorwurf, ich hätte das Beispiel von Take nicht verstanden!

              Erst danach stellst Du Dein Beispiel vor.

              Und wenn sich Dein Satz "Du kannst 1 und 1 zusammenzählen?"
              darauf beziehen sollte, so ist dies erst recht eine Unterstellung!

              1. @@Gerli:

                nuqneH

                Das ist doch eindeutig zu verstehen als Vorwurf, ich hätte das Beispiel von Take nicht verstanden!

                Äh, ich hoffe nicht. So war es nämlich nicht gemeint.

                Und wenn sich Dein Satz "Du kannst 1 und 1 zusammenzählen?"
                darauf beziehen sollte, so ist dies erst recht eine Unterstellung!

                Nun bleib mal auf’m Teppich.

                Qapla'

                --
                Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
                (Mark Twain)