Antwort an „Rolf B“ verfassen

Hallo Nico,

so einfach ist das nicht. In einer Regex bedeutet ˋ[...]ˋ ein Zeichen aus einem bestimmten Zeichenvorrat. Das kann sein:

  • Auflistung von Zeichen
  • Auflistung von Zeichenbereichen.

ˋ[abcxyz]ˋ bedeutet: Matche ein Zeichen, das a,b,c,x,y oder z ist
ˋ[a-z]ˋ bedeutet: Matche ein Zeichen aus dem Bereich der Zeichen von a bis z. Das geht nach ihrem Zeichencode (ursprünglich ASCII, heute Unicode),

Das kann man auch kombinieren: ˋ[a-z0-9]ˋ matcht ein Zeichen, das im Bereich a-z oder 0-9 ist.

Eine solche [] Gruppe kann mit einem Multiplikator versehen werden. ˋ[a-z]*ˋ oder ˋ[a-z]{0,}ˋ matchen beliebig viele Zeichen a-z, ˋ[a-z]+ˋ oder ˋ[a-z]{1,}ˋ matchen ein oder mehr Zeichen, ˋ[a-z]?ˋ oder ˋ[a-z]{0,1}ˋ matchen 0 oder 1 Vorkommen und allgemein matcht ˋ[a-z]{m,n}ˋ m bis n Vorkommen.

Innerhalb der eckigen Klammern hat ein Multiplikator aber keine Bedeutung, innerhalb der eckigen Klammern hast Du keine Regex-Syntax, nur die Zeichenbereich-Syntax.

Ich mutmaße, dass man deine Abfrage mit einem Lookahead oder Lookbehind lösen könnte, aber das würde ich für den falschen Ansatz halten. Denn deine Regex ist ohnehin noch zu generisch, sie würde auch "12,345,65" matchen oder "12...45". Absicht? Frage ist auch, warum Du . und , drin hast. Möchtest Du Dezimalpunkt UND Dezimalkomma treffen, oder möchtest Du auch Tausendertrennzeichen erfassen können?

Wenn wir mal nur vom Dezimalkomma reden, dann brauchst Du eine Regex, die mindestens folgende Schreibweisen versteht - das ist die Pflicht:

12345 (Nur Ziffern)
123,456 (Ein und genau ein Dezimalkomma)

Kür 1:
123.456 (auch ein und genau ein Dezimalpunkt)

Kür 2:
,543 (die Ziffern vor dem Dezimalkomma wurden weggelassen)

Kür 3:
1.234,56 (Tausendertrennzeichen)

Kür 4:
1,234.56 (englisch mit Tausenderkomma)
1'234,56 (schweizerisch)

Die Küren 1 und 4 zeigen das Hauptproblem: Zahlenformatierung ist Ländersache, und Kür 1 zeigt, wie schnell man sich um einen Faktor 1000 irren kann, wenn man im falschen Land ist. Multinationale Zahlenerkennung gelingt nur mühsam, und wusstest Du schon, dass es nach DIN auch ein Leerzeichen als Tausendertrenner gibt?

Also - bevor wir Regexe bauen - welche Kür willst Du tanzen und welche nicht?

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen