RuD: Frage zu Regex

Hallo,
ich versuche krampfhaft eine Regex hinzukriegen:
er soll auf jede Art von Waehrungsformatierung passen:

($[0-9]{1,4}.[0-9]{0,2})|($[0-9]{1,4})|([0-9]{1,4}$)|([0-9]{1,4}.[0-9]{0,2}$)

kommt mir schon ein bisschen lang vor!

er soll auf $12.30, $12, 12$, 12.30$, $12,30 usw. passen

wie kann man festlegen, das z.B. ein Dollarzeichen davor oder dahointer stehen kann aber nicht muss. Oder ein Punkt oder Komma in der Mitte, aber nur wenn danach noch zwei Zahlen kommen?

Tschau

--
                       __
      ________   _____/ //
     / ___   // / __   //
    / //  / //_/ /_/  //
   /_//  /___________//
  1. Hi, habs selbst verkuerzt aber ganz gefaellts mir nicht:

    ich denke ganz opimal isses noch ne:

    (${0,1}[0-9]{1,4}.{0,1},{0,1}[0-9]{0,2}${0,1})

    Tschau

    --
                           __
          ________   _____/ //
         / ___   // / __   //
        / //  / //_/ /_/  //
       /_//  /___________//
    1. Hi,

      Hi, habs selbst verkuerzt aber ganz gefaellts mir nicht:

      ich denke ganz opimal isses noch ne:

      (${0,1}[0-9]{1,4}.{0,1},{0,1}[0-9]{0,2}${0,1})

      {0,1} kann man als ? schreiben.

      $123.,$

      wird von Deinem Ausdruck auch gefunden.

      cu,
      Andreas

      --
      Warum nennt sich Andreas hier MudGuard?
      Schreinerei Waechter
      Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hi,

    Hallo,
    ich versuche krampfhaft eine Regex hinzukriegen:
    er soll auf jede Art von Waehrungsformatierung passen:

    ($[0-9]{1,4}.[0-9]{0,2})|($[0-9]{1,4})|([0-9]{1,4}$)|([0-9]{1,4}.[0-9]{0,2}$)

    kommt mir schon ein bisschen lang vor!

    er soll auf $12.30, $12, 12$, 12.30$, $12,30 usw. passen

    Also: zwei Alternativen: Währungsbezeichner + Zahl bzw. Zahl + Währungsbezeichner

    ($|USD ?)zahl|zahl($| ?USD)

    Zahl soll sein (wenn ich Dich richtig verstanden habe:
    Vorkommateil evtl. gefolgt von Dezimaltrenner + 2 Nachkommastellen

    Vorkommateil: [0-9]+ bzw. \d+ wenn Dein Regextool \d unterstützt

    Dezimaltrenner + 2 Nachkommastellen: [.,]\d{2} bzw. [.,][0-9]{2}

    zahl ist also: \d+([.,]\d{2})?  bzwl. [0-9]+([.,][0-9]{2})?

    Zusammen mit dem Rest:

    ($|USD ?)\d+([.,]\d{2})?|\d+([.,]\d{2})?($| ?USD)
    bzw.
    ($|USD ?)[0-9]+([.,][0-9]{2})?|[0-9]+([.,][0-9]{2})?($| ?USD)

    Wenn Du die Einzelteile nicht benötigst, kannst Du die () noch durch (?:) [i.e. non-capturing parentheses] ersetzen, das macht die Sache etwas performanter.

    Also
    (?:$|USD ?)[0-9]+(?:[.,][0-9]{2})?|[0-9]+(?:[.,][0-9]{2})?(?:$| ?USD)

    (die Variante für \d überlasse ich Dir ;-)

    Wenn das ganze jetzt noch an Wortgrenzen steht, kann man nochmal etwas Performance rausholen, indem man \b(?: )\b um das ganze legt:

    \b(?:(?:$|USD ?)[0-9]+(?:[.,][0-9]{2})?|[0-9]+(?:[.,][0-9]{2})?(?:$| ?USD))\b

    Wenn Du nur $ als Währungszeichen hast, kannst Du natürlich aus (?:$| ?USD) einfach $ machen.

    wie kann man festlegen, das z.B. ein Dollarzeichen davor oder dahointer stehen kann aber nicht muss. Oder ein Punkt oder Komma in der Mitte, aber nur wenn danach noch zwei Zahlen kommen?

    Mit Zahlen meinst Du ja vermutlich Ziffern, oder?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Danke, so ausfuehrlich war zwar nicht noetig. Aber nioch mal vielen Dank.

      RuD