Regulärer Ausdruck Problem

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Regulärer Ausdruck Problem

    Hallo Phpler,

    ich steh mal wieder vor einem Problem.

    Ich schaffs einfach nicht nur ne ordentlich $regExp für preg_match() zusammen zu bauen wie ich es will.

    Ich versuchs jetzt seit knapp 2 Tagen mich mit diesem leidigen Thema vertraut zu machen, aber irgendwie funktionierts nicht.

    bisher siehts so aus:
    $regEXP = "/^[a-zA-Z0-9_@.]+$/s";

    Aber irgendwie funktioniert es nur ab und zu.... und das ist blöd


    Vielleicht könnte mir jemand von euch helfen und mir die richtige für meine Bedürfnisse basteln.

    Wie oben vll zu erkennen sollen nur Zeichen von "a-z", "A-Z", "0-9" und die Sonderzeichen "_", "@", und "." zulässig sein.
    Es soll zusätzlich nur ein zusammenhängender String sein dürfen. D.h. sobald ein 2. Wort durch ein leerzeichen getrennt kommt soll es auch unzulässig sein.


    Sollt sich jemand damit jemand auskennen und mir helfen können bei meinem Problem wäre ich sehr dankbar.

    Gruß
    Der die das, wer wie was, wieso weshalb warum
    ..... wer nicht fragt bleibt dumm.

  • #2
    Zitat von Maanee9 Beitrag anzeigen
    Aber irgendwie funktioniert es nur ab und zu.... und das ist blöd
    Diese Aussage ist als Problembreschreibung auch - blöd.

    Beispieldaten?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Zitat von Maanee9 Beitrag anzeigen
      Aber irgendwie funktioniert es nur ab und zu.... und das ist blöd
      tja, dannn zeig bitte die Beispiele, wo es sich nach deiner Vorstellung falsch verhält.
      modifer 's' passt eigentlich nicht in Logik von deinem Regex, da bei deinem Ausdruck muss du erst mal Zeilenumbruch erlauben, um ihn danach als Zeichen zu berücksichtigen.
      Slava
      bituniverse.com

      Kommentar


      • #4
        Du solltest den Punkt escapen und den Modifier s entfernen.

        Kommentar


        • #5
          Zitat von onemorenerd Beitrag anzeigen
          Du solltest den Punkt escapen
          http://www.php.net/manual/en/regexp.reference.dot.php
          Dot has no special meaning in a character class
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Ok vielen dank.

            Ich probiers morgen mal aus.
            Hab heute leider wenig Zeit.

            Meld mich dann morgen zurück.
            Der die das, wer wie was, wieso weshalb warum
            ..... wer nicht fragt bleibt dumm.

            Kommentar


            • #7
              Zitat von Maanee9 Beitrag anzeigen
              ... bisher siehts so aus:
              $regEXP = "/^[a-zA-Z0-9_@.]+$/s";

              ...
              Wie oben vll zu erkennen sollen nur Zeichen von "a-z", "A-Z", "0-9" und die Sonderzeichen "_", "@", und "." zulässig sein.
              Es soll zusätzlich nur ein zusammenhängender String sein dürfen. D.h. sobald ein 2. Wort durch ein leerzeichen getrennt kommt soll es auch unzulässig sein. ...
              Dafür sollte doch das hier ausreichen:
              PHP-Code:
              preg_match('/\A[a-zA-Z0-9@_.]+\z/'$heuhaufen$treffer); 
              Da ein Leerzeichen nicht in der Zeichenklasse [a-zA-Z0-9@_.] vorkommt, sollte preg_match() bei Strings mit solchen auch eine 0 zurückgeben.

              Kleiner Tipp: Wenn du dir nicht merken kannst, welche Bedeutung ^ und $ haben (die kann sich nämlich ändern), dann verzichte lieber darauf und benutze \A für String-Anfang und \z (kleines z) für String-Ende. Deren Bedeutung bleibt immer gleich.

              Ähnliches gilt für Modifikatoren. /s hat den lustigen Namen "DOTALL" und das bedeutet, der Punkt steht für alles. Im Normalfall steht der nämlich für alles außer Zeilenumbrüche. Und wie schon erwähnt, gilt das natürlich nicht innerhalb einer Zeichenklasse. Deshalb kannst du ihn weglassen.
              Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

              Kommentar


              • #8
                Vielen Dank euch allen.

                Mein preg_match funktioniert endlich so wie es soll.


                Auch wenn ich das regular Expression Zeug immernoch nicht ganz durchblicke.
                Begriffe suchen und Textteile ausschneiden funktioniert ja gerade noch so... aber alles was drüber hinausgeht schafft bei mir immer wieder Verwirrung.



                Naja egal. Vielen dank nochmals
                Der die das, wer wie was, wieso weshalb warum
                ..... wer nicht fragt bleibt dumm.

                Kommentar


                • #9
                  Zitat von Maanee9 Beitrag anzeigen
                  Auch wenn ich das regular Expression Zeug immernoch nicht ganz durchblicke.
                  Schau dir ggf. mal das hier an.

                  Gruß
                  Peter
                  Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                  Meine Seite

                  Kommentar


                  • #10
                    Zitat von fireweasel Beitrag anzeigen
                    Dafür sollte doch das hier ausreichen:
                    PHP-Code:
                    preg_match('/\A[a-zA-Z0-9@_.]+\z/'$heuhaufen$treffer); 
                    Und das nicht?

                    PHP-Code:
                    preg_match('/\A[\w@.]+\z/'$heuhaufen$treffer); 


                    \w = a-z UND A-Z UND '_'

                    Kommentar


                    • #11
                      Zitat von syntaxerror Beitrag anzeigen
                      Und das nicht?
                      Nö.

                      PHP-Code:
                      preg_match('/\A[\w@.]+\z/'$heuhaufen$treffer); 


                      \w = a-z UND A-Z UND '_'
                      [0-9] scheint bei deiner Lösung zu fehlen.

                      Der Thread ist übrigens schon ca. sechs Monate alt. Ich glaube kaum, dass der TO deine Tipps noch mitbekommen wird.
                      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                      Kommentar


                      • #12
                        \w schließt Ziffern mit ein, auch wenn syntaxerror das vergessen hat, zu erwähnen.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #13
                          Zitat von AmicaNoctis Beitrag anzeigen
                          \w schließt Ziffern mit ein, auch wenn syntaxerror das vergessen hat, zu erwähnen.
                          Jau, stimmt!

                          Und weil ich diese Feinheiten gerne vergesse (inklusive der Tatsache, dass "_" ein "word character" ist), ziehe ich Zeichenklassen, in denen explizit aufgezählt wird, was dazugehört (oder nicht) diesen Backslash-Abkürzungen vor. Syntaxerror dagegen scheint in diesem Fall entgegen seiner anderswo postulierten Vorgehensweise "Zeichen sparen zu wollen". Das erscheint mir etwas inkonsequent.
                          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                          Kommentar


                          • #14
                            Zitat von AmicaNoctis Beitrag anzeigen
                            \w schließt Ziffern mit ein, auch wenn syntaxerror das vergessen hat, zu erwähnen.
                            Jep, das war mein Fehler, sry. Hatte mich aber in der Tat vor dem Posten vergewissert gehabt, dass die Ziffern mit von der Partie sind...

                            Zitat von fireweasel Beitrag anzeigen
                            scheint in diesem Fall entgegen seiner anderswo postulierten Vorgehensweise 'Zeichen sparen zu wollen'.
                            Das erscheint mir etwas inkonsequent.
                            Isses aber nicht. Ich spare da Zeichen, wo es dennoch kompatibel bleibt. Das hast du bei deinem Threadzitat gänzlich außer Acht gelassen! (wie immer wenn man was aus dem Kontext rauszieht)
                            Bei \w kann ich ja nachweislich davon ausgehen, dass das PHP kann sowie Perl, sowie Javascript und u. U. noch ein paar mehr.

                            Diese /U Geschichten könnten aber z. B. bei einigen Regex-Implementationen Probleme machen. Jedenfalls ist mir mindestens schon vor einiger Zeit mal eine Impl. untergekommen, die konnte /U gar nicht!
                            Zuletzt geändert von syntaxerror; 29.03.2010, 09:14.

                            Kommentar


                            • #15
                              @syntaxerror: Sei doch bitte so gut, und Kram nicht die ganzen alten Threads wieder hervor. Ich finde es toll, dass du dich fachlich ins Forum einbringst, aber wäre es nicht ratsamer, du konzentrierst dich auf akute Probleme? =)
                              [FONT="Helvetica"]twitter.com/unset[/FONT]

                              Shitstorm Podcast – Wöchentliches Auskotzen

                              Kommentar

                              Lädt...
                              X