none
Problem mit regulärem Ausdruck RRS feed

  • Frage

  • Folgenden regulären Ausdruck verwende ich, um zu prüfen, ob eine Eingabe eine gültige Dezimalzahl ist:

    [0-9]+(\.([0-9]?)+)?

    Die Dezimalzahl soll in folgender Form zu schreiben sein: 56.57567 und nicht als 56,57567.

    Die folgende Prüfroutine mit texta = der Zahltext und pattern = regulärer Ausdruck

    std::tr1::regex_match(texta,pattern)

    akzeptiert aber beides.

    Wenn ich den Ausdruck aber mit den üblichen Webtools prüfe, liefert er richtige Ergebnisse.

    Was könnte hier falsch sein?

    Besten Dank und Grüße,

    Thomas

    Sonntag, 12. Januar 2014 09:56

Antworten

  • Hallo,
    C++ interpretiert ein einfaches \ als Einleitung einer Escape Sequenz. Ein \\ wird dagegen als einfaches \ interpretiert. Dein Ausdruck muss also wie folgt lauten:

    [0-9]+(\\.([0-9]?)+)?

    Dann funktioniert der Ausdruck. Vor der Änderung hätte an der Stelle mit dem. noch jedes beliebige Zeichen stehen können; und die Abfrage wäre erfolgreich gewesen.

    PS: In der Fehlerliste müsste auch eine Warnung erscheinen, das \. keine gültige Escapesequenz sei:
    warning C4129: '.': Nicht erkannte Folge von Escapesequenz


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.



    Sonntag, 12. Januar 2014 11:18

Alle Antworten

  • Hallo,
    C++ interpretiert ein einfaches \ als Einleitung einer Escape Sequenz. Ein \\ wird dagegen als einfaches \ interpretiert. Dein Ausdruck muss also wie folgt lauten:

    [0-9]+(\\.([0-9]?)+)?

    Dann funktioniert der Ausdruck. Vor der Änderung hätte an der Stelle mit dem. noch jedes beliebige Zeichen stehen können; und die Abfrage wäre erfolgreich gewesen.

    PS: In der Fehlerliste müsste auch eine Warnung erscheinen, das \. keine gültige Escapesequenz sei:
    warning C4129: '.': Nicht erkannte Folge von Escapesequenz


    Koopakiller [kuːpakɪllɐ] (Tom Lambert)
    Webseite | Code Beispiele | Facebook | Twitter | Snippets   C# ↔ VB.NET Konverter
    Markiert bitte beantwortende Posts als Antwort und bewertet Beiträge. Danke.



    Sonntag, 12. Januar 2014 11:18
  • Super, das klappt. In der Tat, die Meldung kam.

    Danke!

    Sonntag, 12. Januar 2014 13:50