Regex
-
Hallo,
ich habe eine Frage zu Regex.
private Regex reCurrentRegex = new Regex("[0-9]{1}.[0-9]{4}|[0-9]{2}.[0-9]{4}");
warum wird der String "20.20.0000" als gültig erkannt?
-
Was heisst "als gültig erkannt"? Machst du einfach ein
reCurrentRegex.IsMatch
? Dann ist "20.20.0000" gültig, ja, denn er findet darin den Match "20.0000". Meinst du vielleicht diesen Regex?
"^[0-9]{1}.[0-9]{4}|^[0-9]{2}.[0-9]{4}"Man bemerke die Zeichen ^ und $.
Siehe: http://msdn.microsoft.com/en-us/library/az24scfc.aspx
bzw.
http://msdn.microsoft.com/en-us/library/az24scfc.aspx#atomic_zerowidth_assertionsIch möchte zudem auch darauf hinweisen, dass ein Punkt als Wildcard benutzt wird. Meinst du womöglich nicht eher \.?
Siehe: http://msdn.microsoft.com/en-us/library/az24scfc.aspx#character_classesGrüssli
-
private Regex reCurrentRegex = new Regex("^[0-9]{1}\.?[0-9]{4}|^[0-9]{2}\\\.?[0-9]{4}");
Ist besser, da werde ich mich wohl noch ein wenig einarbeiten müssen.
Danke für Deine Hilfe.
-
hermes schrieb:
private Regex reCurrentRegex = new Regex("^[0-9]{1}\.?[0-9]{4}|^[0-9]{2}\\\?.[0-9]{4}");
Ist besser, da werde ich mich wohl noch ein wenig einarbeiten müssen.
Danke für Deine Hilfe.
Kleiner Tipp mit @ vor String-literals kannst du die Escapes sparen:
new Regex(@"^[0-9]{1}\.?[0-9]{4}$|^[0-9]{2}\?.[0-9]{4}$");
das hilft auch bei Filenames:
var superlongfilename = @"C:\Users\newuser\AppData\Roaming\"
(bei fehlenedem @ wäre zwischen Users und ewuser ein Zeilenumbruch)Quelle:
http://msdn.microsoft.com/en-us/library/aa691090.aspx