Anzeige

Brauche Hilfe bei RegEx...


#1
Ich möchte eine beliebig lange Zahlenkette besser lesbar machen, indem ich vom Ende der Zahlenkette aus immer nach 3 Stellen einen Punkt (.) setze. Die Länge der Zahlenkette ist mindestens 4 Zeichen lang und ansonsten in der Länge nicht begrenzt.

Beispiele:
123456 -> 123.456
12345 -> 12.345
1234567890 -> 1.234.567.890

Soweit bin ich gekommen:

(\d{3})?$*
.$1

Das funktioniert bei 6-, 9-, 12-, 15-, 18-stelligen Zahlenketten jedoch nicht bei 4-, 5-, 7-, 8-, 10-, 11-, 13-, 14-, 16-, 17-stelligen Zahlenketten.

z.B:
4-stellig = 123.4 (falsch) richtig wäre: 1.234
5-stellig = 123.45 (falsch) richtig wäre: 12.345
8-stellig = 123.456.7.8 (falsch) richtig wäre: 12.345.678

Ach ja, die Punkte am Anfang und Ende sind nicht das Problem, die entferne anders... :)

Vielen Dank im voraus für eure Hilfe Und Gruß, Ticks
 
Zuletzt bearbeitet:
#3
Vielen Dank, aber damit kann ich leider nichts anfangen.

Ich brauche RegEx, da ich dies nicht anders in einen Kurzbehl einbauen kann.

Es geht um Altersberechnungen. Das Alter wird anhand des Geburtsdatums in Jahren, Monaten, Wochen, Tagen, Stunden, Minuten und Sekunden berechnet.

Ich benötige das RegEx, um das ganze übersichtlicher darzustellen. Gerade bei Minuten und Sekunden ist das sehr hilfreich.

Gruß, Ticks
 
#4
Kannst du den String zum parsen umdrehen?
Das Problem ist, dass der RegEx von vorne beginnt.

Hier die Lösung mit dem Verdrehten String:
Mein Test bei regex101
Code:
global
(\d{3})\B
$1.
Also je nach Sprache:
PHP:
$result = strrev(preg_replace('/(\d{3})\B/g', '.$1', strrev($myNumber)));
Nachtrag:
Gibt es in der Sprache keinen Format-Befehl?
 
Zuletzt bearbeitet:
#6
So, ich habe das Problem dank eurer Hilfe lösen können. Und zwar komplett mittels RegEx!

Ich habe ermittelt, daß ich in meinen Berechnungen nicht mehr als 15 Stellen inklusive Punkten benötige.

Zunächst lese ich die Zahlenkette ein und gebe sie rückwärts wieder aus.
\b([^\s])([^\s])([^\s])([^\s])([^\s])([^\s])([^\s])([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s]))?)?)?)?)?)?)?\b
$15$14$13$12$11$10$9$8$7$6$5$4$3$2$1

Vorgabe: 1234567890
Ergebnis: 0987654321

Dann setze ich in der rückwärtsstehende Zahlenkette die Punkte nach 3 Ziffern.
(\d{3})\B
$1.

Vorgabe: 0987654321
Ergebnis: 098.765.432.1

Nun noch einmal das erste RegEx um die Zahlenkette wieder in die richtige Richtung zu drehen.
\b([^\s])([^\s])([^\s])([^\s])([^\s])([^\s])([^\s])([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s])(?:([^\s]))?)?)?)?)?)?)?\b
$15$14$13$12$11$10$9$8$7$6$5$4$3$2$1

Vorgabe: 098.765.432.1
Ergebnis: 1.234.567.890

Wahrscheinlich kann man diese RegEx noch verfeinern, aber es funktioniert einwandfrei.

Vielen Dank an alle und Gruß, Ticks.
 
Zuletzt bearbeitet:
#8
Wow!!! Das gefällt mir sehr... :love:
Das nehme ich gerne!

Bin in Sachen RegEx blutiger Anfänger, aber es interessiert mich sehr, da man damit eine Menge machen kann wie ich sehe.

Lieben Dank nochmals und Gruß, Ticks
 
Anzeige