Regular Expression tr1:regex_match



  • Danke.

    Na super. Sprich wenn ich nun die IP Adresse auf Richtigkeit überprüfen will muss ich nun auf eine andere Bibliothek zurückgreifen. Am besten wahrscheinlich auf boost.


  • Mod

    Nö. Es gibt ja inet_addr:
    http://msdn.microsoft.com/en-us/library/ms738563(VS.85).aspx
    Das ist weitaus mächtiger und Du kannst die Werte hinterher einfacher prüfen als mit diesem komplexen regex Ausdruck.
    Ich fände dies auch einfacher im Code zu lesen.

    Das Problem ist sicherlich der Bug an sich, dass repetitions nichtkorrekt behandelt werden.

    BTW: Du kannst Dich gerne mit dem Bezug auf den Connect-Bug an den MS Support wenden. Evtl. bekomst Du einen Hotfix!



  • Hallo.

    Danke für den Tipp. Das mit dem inet_addr wäre ja nicht schlecht. Das Problem ist nur dass keine IP Adresse sondern nur eine Art IP Adresse ist die ich überprüfe. Nennt sich NetID hat 2 Stellen mehr. IPV6 wäre dann ne Alternative. Da gäbe es ja dann die Funktion RtlIpv6StringToAddress(). Wenn die dann nicht nur für Vista aufwärts wäre. Verwenden hier immer noch XP. 😞



  • Eine IPv6 Adresse sieht *ganz* anders aus als eine IPv4 Adresse.
    Wenn deine NetID also ähnlich wie eine IPv4 Adresse aussieht, dann wirst du eine IPv6-Parser-Funktion ziemlich sicher nicht verwenden können um die NetID auf Gültigkeit zu prüfen.


  • Mod

    Dennoch: Einen Parser für so etwas zu bauen, der 6 Werte so herauszieht, die durch Punkt getrennt sind, ist ein Klax.

    PS: Ich will den Fehler nicht herunterreden, ich finde ihn auch heftig.



  • Dennoch: Einen Parser für so etwas zu bauen, der 6 Werte so herauszieht, die durch Punkt getrennt sind, ist ein Klax.

    Ok gebe ich dir recht. Dachte halt für genau so was nimmt man reguläre Asudrücke statt nen Parser.

    Was spricht den gegen Reguläre Ausdrücke (Ausser natürlich dieser Fall mit dem Bug).


  • Mod

    Dine Prüfungen auf die erlaubten Werte paare wird weitaus übersichtlicher und verständlicher sein. 😉



  • Ja mag sein. Aber auch aufwändiger (auch wenns ein "Klax" ist) und mehr Codezeilen.



  • Wobei man dann bei den einzelnen Abschnitten auch überprüfen muss ob diese gültige Werte enhalten. Hier würde ich dann auch regex benutzen. Oder gibts da auch ne bessere Lösung? IsNumeric oder so?


  • Mod

    Mit strtoul ist das doch total easy.
    http://msdn.microsoft.com/en-us/library/aa273010(VS.60).aspx

    - Du hast Deine x int-Felder, oder einen Array
    - Führst strtoul aus und bekommst den Zeiger auf den Punkt,oder das Zeichen durch das die Konvertierung beendet wurde.
    - Rückgabe Wert auf Overflow prüfen!
    - Prüfst auf den Punkt und weiter gehts, mit dem nächsten Feld.

    Das kann man auch easy und geschickt in eine Loop packen.

    Am Ende hast Du Deine x Werte und prüfst was in jedem einzelnen Segment erlaubt ist.

    Ich bezweifle, dass dies wirklich mehr Codezeilen sind.



  • Das auseinander friemeln der Werte ist kein Problem.
    Zum umwandel verwende ich atoi. Wobei ich hier aber wie auch in deiner genannten Funktion - strtol - das Problem habe: "returns 0 if no conversion can be performed".

    Also wenn im String z.B. Buchstaben vorhanden sind erhalte ich eine 0. Da 0 aber eine gültige Zahl ist kann ich hier gegen nicht prüfen.

    Also muss ich doch vorher prüfen ob jedes Segment nur aus Zahlen besteht.



  • Oh sorry. Klar habe da was übersehen. Bekomme es hin. Habe nicht genau genug gelesen. 🙂

    Danke dir!!


Anmelden zum Antworten