Warum lässt dieser Regexausdruck: "\\d{1}|\\d{2}[.]\\d{1}|\\d{2}[.]\\d{2}|\\d{4}" in Java die Eingabe: "0 0 0" zu? 0.0.0 geht nicht, wie gewollt, aber 0 0 0?

3 Antworten

Was ist dein Ziel? Das ergibt irgendwie so gar keinen Sinn :D

Du lässt vier verschiedene Patterns prüfen und das Erste ist eine einzelne Ziffer.

Also egal ob "0 0 0" oder "0.0.0", es werden immer drei 0en als einzelne Matches gefunden.

Abgesehen davon:

\d{1} = \d
[.] = \.

Dein OR ist falsch, Regex weiß nicht wo es enden soll. Regex denkt du meinst „Eine Ziffer ODER zwei Ziffern + ein Punkt + eine Ziffer ODER zwei Ziffern + ein Punkt + zwei Ziffern ODER vier Ziffern“. Um das zu beheben kannst einfach mit Klammern dan Bereich umschließen, auf den sich das jeweilige OR bezieht. Oder du verzichtest hier gänzlich auf das OR und machst gebrauch von {1,2}.

Und falls du einen Punkt überprüfen willst solltest du ihn einfach so hinschreiben \. anstatt [.]

Woher ich das weiß:Hobby – Programmieren ist mein Hobby & Beruf

oiqwd12 
Beitragsersteller
 29.12.2021, 22:48

genau, aber warum wird dan 0 0 0 akzeptiert? Das sollte ja deshalb nicht passieren

0
MrAmazing2  29.12.2021, 22:51
@oiqwd12

Dein OR ist falsch. Regex weiß nicht von wo bis wo es geht. Mach klammern rum.

(\d{1}|\d{2})\.(\d{1}|\d{2})\.(\d{2}|\d{4})

Wobei du es auch einfach ganz weglassen kannst.

\d{1,2}\.\d{1,2}\.(\d{2}|\d{4})

1
MrAmazing2  29.12.2021, 22:54
@MrAmazing2

Das letzte OR kann auch noch weggemacht werden denke ich:

\d{1,2}\.\d{1,2}\.\d{2}\d{2}?

1

Versuche mal

\d{2}\.\d{1}|\d{2}\.\d{2}|\d{4}|\d{1}

Ich hoffe, ich habe das Problem soweit richtig verstanden.

Wenn das das Problem löst, dann war das Problem, dass die Matches wohl von links nach rechts durchgegangen wurde und da die einzelne Zahl da dann immer am Anfang stand wurde die auch immer gematched

Woher ich das weiß:Hobby

Wissididom  29.12.2021, 22:13

PS: Da es Java ist natürlich \\ statt \

0