Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] preg_match pattern

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] preg_match pattern

    Hallo

    Ich habe zwar eine Lösung, bin mir aber nicht sicher, ob es auch die beste Lösung ist.

    String
    Code:
    ABc12-1234-567
    Der String hat folgendes Format:
    - A-Z,a-z,0-9 - 1 bis 5 Zeichen
    - 1 Trennzeichen wie " - / : "
    - Eine Zahl - mind. 1
    - 1 Trennzeichen wie " - / : "
    - Eine Zahl - mind. 1

    Mein Pattern:
    Code:
    ([A-Za-z0-9]{1,5})[\D](?P<pid>\d+)[\D](?P<cid>\d+)
    Es geht, aber mMn. ist \D zum ermitteln des Trennzeichen nicht optimal.

    Benötigt werden nur die 2 Zahlen zwischen den Trennzeichen.
    Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

  • #2
    \D sind alle non-digits, also alles ausser 0-9

    Warum fragst du deine zugelassenen Trennzeichen nicht ganz konkret ab? Wenn "minus" und "doppelpunkt" zugelassen sind, frag exakt diese 2 Zeichen ab.
    (Du kannst auch mit negierten character classes alle Zeichen zulassen, die nicht a-zAZ0-9 sind bzw. aus einem Pattern, das du dir ausdenkst)
    Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

    Kommentar


    • #3
      Zitat von lstegelitz Beitrag anzeigen
      Warum fragst du deine zugelassenen Trennzeichen nicht ganz konkret ab? Wenn "minus" und "doppelpunkt" zugelassen sind, frag exakt diese 2 Zeichen ab.
      Weil es keine definierten Trennzeichen gibt. Du hast es im nächsten Teil schon richtig genannt. "alle Zeichen zulassen, die nicht a-zAZ0-9 sind"

      Zitat von lstegelitz Beitrag anzeigen
      (Du kannst auch mit negierten character classes alle Zeichen zulassen, die nicht a-zAZ0-9 sind bzw. aus einem Pattern, das du dir ausdenkst)
      An den negierten Bereich habe ich in diesem Moment nicht gedacht, danke. Damit treffe ich es genau.
      Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

      Kommentar


      • #4
        [\W] or [\W_] should do.
        [COLOR="#F5F5FF"]--[/COLOR]
        [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
        [COLOR="#F5F5FF"]
        --[/COLOR]

        Kommentar


        • #5
          Zitat von nikosch Beitrag anzeigen
          [\W] or [\W_] should do.
          Mir ist die Funktion von \W bekannt. Aber ich verstehe nicht, warum \W in diesem Fall besser ist, als \D. Und was bedeutet das \W_ ?
          Der Unterschied zwischen dem richtigen Wort und dem beinahe richtigen ist derselbe Unterschied wie zwischen dem Blitz und einem Glühwürmchen.

          Kommentar


          • #6
            \W schließt die Zeichen [A-Za-z0-9_]* aus. Der Underscore danach nimmt es aber wieder mit rein. [\W_] ist also equivalent zu [^A-Za-z0-9]*.

            Ob die Lösung jetzt vollständig ist, ist schwer zu sagen, aber wenn Buchstaben nicht als Trenner vorkommen dürfen (was ich annehme), dann ist es zumindest mal sicherer als \D.

            * Und evtl. je nach Lokalisierung andere.

            Kommentar


            • #7
              Weil \D eben nur zahlenartige Zeichen ausschließt, \W auch buchstabenartige (wobei auch der Unterstrich traditionell buchstabenartig im Sinne von „word“ ist – deshalb auch [\W_]).

              Du sagst ja selbst:

              "alle Zeichen zulassen, die nicht a-zAZ0-9 sind"
              Ich würde aber [^a-zA-Z0-9] schreiben. Dann hast du nicht den Ärger damit, was \d und \w unter Umständen wirklich bedeuten.

              (Bezieht sich auf Python 3. Ist im Unicode-Mode in PHP aber glaube ich auch so.)

              [0-9] isn't equivalent to \d. [0-9] matches only 0123456789 characters, while \d matches [0-9] and other digit characters, for example Eastern Arabic numerals
              - http://stackoverflow.com/a/6479605

              Kommentar

              Lädt...
              X