Regex Problem, alles außer bestimmte Zahlen
Stefan
- programmiertechnik
Hi Forum,
Hab ein, wahrscheinlich, kleines Regex Problem aber hab auch nach langem suchen nicht die richtige Lösung gefunden :/
Ein String darf alle positiven Zahlen enthalten mit maximal 3 Stellen (also 1-999) aber z.B. nicht die Zahlen 1,2,9,12,15.
Die Zahlen kommen aus einem Array und das Pattern wird dynamisch zusammengebastelt, Sprache ist Java
Bin für jede Hilfe dankbar
MFG
Stefan
Hi,
Hab ein, wahrscheinlich, kleines Regex Problem aber hab auch nach langem suchen nicht die richtige Lösung gefunden :/
Ein String darf alle positiven Zahlen enthalten mit maximal 3 Stellen (also 1-999) aber z.B. nicht die Zahlen 1,2,9,12,15.
Die Zahlen kommen aus einem Array und das Pattern wird dynamisch zusammengebastelt, Sprache ist Java
Prüfe mit einem Regex, ob es sich bei dem String um eine Zahl mit 3 Stellen handelt.
Wenn ja, prüfe in einer Schleife für jedes Array-Element, ob es mit dem String identisch ist.
Die Schleife bräuchtest Du sowieso, um die Zahlen in einen wie auch immer gearteten Regex (evtl. mit haufenweise negativen Lookaheads) zusammenzubauen, der auf alle Zahlen im Array prüft. Und da dürfte es effizienter sein, im Schleifendurchlauf gleich gegen den String zu prüfen.
cu,
Andreas
Prüfe mit einem Regex, ob es sich bei dem String um eine Zahl mit 3 Stellen handelt.
Wenn ja, prüfe in einer Schleife für jedes Array-Element, ob es mit dem String identisch ist.
Die Schleife bräuchtest Du sowieso, um die Zahlen in einen wie auch immer gearteten Regex (evtl. mit haufenweise negativen Lookaheads) zusammenzubauen, der auf alle Zahlen im Array prüft. Und da dürfte es effizienter sein, im Schleifendurchlauf gleich gegen den String zu prüfen.
Ich würd das aber gern in einem einzigen Regex Audruck unterbringen, also ob die Zahl 3 Stellen hat und nicht den angegebenen Zahlen entspricht. Das Java Programm will nämlich als Benutzereingabenprüfung ein Regexpattern.
Mal von den 3 Stellen abgesehen hab ich versucht es so irgendwie zu testen: [^(^1$|^2$|^3$|^14$)] was zur Folge hat:
1 against [^1$|^2$|^3$|^14$] -> false
2 against [^1$|^2$|^3$|^14$] -> false
3 against [^1$|^2$|^3$|^14$] -> false
4 against [^1$|^2$|^3$|^14$] -> false
5 against [^1$|^2$|^3$|^14$] -> true
7 against [^1$|^2$|^3$|^14$] -> true
9 against [^1$|^2$|^3$|^14$] -> true
10 against [^1$|^2$|^3$|^14$] -> false
11 against [^1$|^2$|^3$|^14$] -> false
12 against [^1$|^2$|^3$|^14$] -> false
13 against [^1$|^2$|^3$|^14$] -> false
14 against [^1$|^2$|^3$|^14$] -> false
gudn tach!
(evtl. mit haufenweise negativen Lookaheads)
naja, bei wenigen zahlen geht's noch halbwegs:
/^(?!(?:[129]|1[25])\z)[1-9]\d{0,2}\z/
(ungetestest, perl-syntax)
da dürfte es effizienter sein, im Schleifendurchlauf gleich gegen den String zu prüfen.
sicher? ich denke das kommt auf verschiedenes an, u.a. auf die anzahl der zu suchenden verbotenen zahlen
prost
seth
gudn tach!
da dürfte es effizienter sein, im Schleifendurchlauf gleich gegen den String zu prüfen.
sicher? ich denke das kommt auf verschiedenes an, u.a. auf die anzahl der zu suchenden verbotenen zahlen
oops, habe gerade gesehen, dass das array ja schon als solches vorgegeben ist. dann wirst du vermutlich recht haben. ach so, und der regexp wird auch etwas unhuebscher:
/^(?!(?:1|2|9|12|15)\z)[1-9]\d{0,2}\z/
prost
seth