Regular Expression
sunny
- programmiertechnik
Hallo!
Also, wie es das Thema schon sagt, ich benötige gerade eine Regular Expression. Habe allerdrings mit RegExen noch nicht allzu viel zu tun gehabt und bin daher unsicher, ob ich das richtig gemacht habe, kann da vielleicht mal jemand drübersehen und mir sagen ob das so korrekt ist?
Bei meinen Tests hats zwar jedenfalls mal geklappt, aber ich bin mangels Erfahrung damit etwas unsicher ...
Also, es soll überprüft werden ob ein String bestimmte Kriterien erfüllt (ja, was auch sonst):
1. Am Beginn soll ein Dateityp in Großbuchstaben angegeben sein, dieser kann aus 2 oder 3 Zeichen bestehen.
2. Dann folgt ein Leerzeichen, ein Bindestrich, und wieder ein Leerzeichen
3. Danach kommt ein beliebig langer numerischer Wert.
4. Am Ende steht dann die Dateigröße, wieder in Großbuchstaben.
Es soll zB. Folgendes erlaubt sein:
PDF - 432 MB
ZIP - 28 KB
DOC - 4567 GB
usw.
Meine selbstgebastelte RegEx sieht nun so aus:
"/[1]{2,3} - [0-9]+ (GB|MB|KB){1}$/"
Ist das so in Ordnung? Dass hier auch zB 0 KB durchgehen würden kann ich verschmerzen, aber habe ich sonst etwas vergessen oder falsch gemacht?
Liebe Grüße
sunny
A-Z ↩︎
hi,
Meine selbstgebastelte RegEx sieht nun so aus:
"/[1]{2,3} - [0-9]+ (GB|MB|KB){1}$/"Ist das so in Ordnung?
Sieht m.E. eigentlich gut aus, für den angedachten Einsatzzweck "massgeschneidert".
Es wäre nur ggf. zu überlegen, ob es RegEx sein "müssen" - bei einer derart klaren und starren Datenstruktur.
Da könnte man ja beispielsweise ebensogut explode (in PHP, sonst vergleichbares) hernehmen - und damit zuerst an " - " splitten, lässt von "PDF - 432 MB" die beiden Teile "PDF" und "432 MB" übrig. Und wenn von letzterem dann auch noch Zahl und Einheit getrennt verlangt sein, splittest man dieses noch mal an einem Leerzeichen " " auf. (Zugegeben, die Prüfung, ob die Einheit auch wirklich in der definierten Wertemenge liegt, hat man damit nicht gleich dabei.)
gruß,
wahsaga
A-Z ↩︎
Also ich würde vermuten, dass das einzige was hier Probleme machen könnte die letzte geschweifte Klammer ist bei:
(GB|MB|KB){1}
Da hier sowieso mit "OR" getrennt nur einfach die Möglichkeit für die Engine besteht eine der Kombos zu finden ... Und vielleicht versucht er deine zwei-Zeichen-Dateitypen auf ein Zeichen {1} zu reduzieren ... ?!?
Hallo,
Also ich würde vermuten, dass das einzige was hier Probleme machen könnte die letzte geschweifte Klammer ist bei:
(GB|MB|KB){1}
Da hier sowieso mit "OR" getrennt nur einfach die Möglichkeit für die Engine besteht eine der Kombos zu finden ... Und vielleicht versucht er deine zwei-Zeichen-Dateitypen auf ein Zeichen {1} zu reduzieren ... ?!?
Nein, das funktioniert eigentlich bisher. Das {1} soll heißen dass der gesuchte Ausdruck (also "GB" oder "MB" oder "KB") nur einmal vorkommen darf ... dachte ich jedenfalls!?
Lg
sunny
Hallo!
Es wäre nur ggf. zu überlegen, ob es RegEx sein "müssen" - bei einer derart klaren und starren Datenstruktur.
Da könnte man ja beispielsweise ebensogut explode (in PHP, sonst vergleichbares) hernehmen - und damit zuerst an " - " splitten, lässt von "PDF - 432 MB" die beiden Teile "PDF" und "432 MB" übrig. Und wenn von letzterem dann auch noch Zahl und Einheit getrennt verlangt sein, splittest man dieses noch mal an einem Leerzeichen " " auf. (Zugegeben, die Prüfung, ob die Einheit auch wirklich in der definierten Wertemenge liegt, hat man damit nicht gleich dabei.)
Das stimmt schon, aber irgendwie wollte ich das jetzt mal "üben", man braucht ja doch öfter mal solche Überprüfungen (E-Mail-Addressen, Datumseingaben etc.).
Wird zudem auch nur intern verwendet ...
Danke für Deine Antwort!
Grüße
sunny
gudn tach!
Meine selbstgebastelte RegEx sieht nun so aus:
"/[1]{2,3} - [0-9]+ (GB|MB|KB){1}$/"Ist das so in Ordnung?
ja, allerdings ist das {1} ueberfluessig (jedoch nicht falsch), weil (GB|MB|KB) schon heisst, dass genau einmal GB oder MB oder KB gematcht werden soll.
ausserdem koenntest du (GB|MB|KB) noch verkuerzen zu [GMK]B, (oder SI- und IEC-konform zu [GMk]i?B).
Dass hier auch zB 0 KB durchgehen würden kann ich verschmerzen
wenn fuehrende nullen nicht erlaubt sein sollen, kannst du statt [0-9]+ (oder aequivalent dazu \d+) auch einfach [1-9]\d* verwenden:
/[2]{2,3} - [1-9]\d* [GMK]B$/
prost
seth
Hallo!
allerdings ist das {1} ueberfluessig (jedoch nicht falsch), weil (GB|MB|KB) schon heisst, dass genau einmal GB oder MB oder KB gematcht werden soll.
ausserdem koenntest du (GB|MB|KB) noch verkuerzen zu [GMK]B, (oder SI- und IEC-konform zu [GMk]i?B).
Dass hier auch zB 0 KB durchgehen würden kann ich verschmerzen
wenn fuehrende nullen nicht erlaubt sein sollen, kannst du statt [0-9]+ (oder aequivalent dazu \d+) auch einfach [1-9]\d* verwenden:
/[1]{2,3} - [1-9]\d* [GMK]B$/
Wow super! Vielen Dank für Deine Tips!
Da lernt man gleich noch dazu! :-)
Liebe Grüße
sunny
A-Z ↩︎
Hi sunny.
Einen Tip hab ich auch noch:
In einigen Dateierweiterungen kommen nicht nur Buchstaben, sondern auch Zahlen vor. Ein prominenter Vertreter ist MP3. Vielleicht möchtest du diesen Fall ja auch berücksichtigen. :)
Hallo,
Einen Tip hab ich auch noch:
In einigen Dateierweiterungen kommen nicht nur Buchstaben, sondern auch Zahlen vor. Ein prominenter Vertreter ist MP3. Vielleicht möchtest du diesen Fall ja auch berücksichtigen. :)
ist mir klar!
Danke für den Tipp, aber solche Typen werden in diesem Fall nicht erlaubt!
Liebe Grüße
sunny