Benutzer mit den meisten Antworten
Problem mit regulärem Ausdruck

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
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.
- Bearbeitet Tom Lambert (Koopakiller) Sonntag, 12. Januar 2014 11:22 PS
- Als Antwort markiert milonass Sonntag, 12. Januar 2014 13:51
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.
- Bearbeitet Tom Lambert (Koopakiller) Sonntag, 12. Januar 2014 11:22 PS
- Als Antwort markiert milonass Sonntag, 12. Januar 2014 13:51