Stefan: Regex Problem, alles außer bestimmte Zahlen

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

  1. 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

    --
    Warum nennt sich Andreas hier MudGuard?
    O o ostern ...
    Fachfragen unaufgefordert per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. 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

    2. 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

      1. 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