Verschachteln von REGEX

AmunRa

Gesperrter Benutzer
Ich habe folgenden Situation.

*w *d

wobei Stern jede beliebe positive zahl sein kann und auch 0
Gültig sind auch werte wo nur z.b *d steht

das heist :
4w 2d ->gültig
2d ->gültig
23w ->gültig
23 4d ungültig
w 5d ungültig

mein REGEX sieht zurzeit
so aus
Code:
[\\d]+w?[\\s]*?[0-9]+d?

der hat nur das Problem dass er bei mir den Vierten Fall auch als Gültig erkennt aber dafür den zweiten als ungültig erkennt mir ist auch klar warum das so ist, mein Problem ist nur, dass ich nicht weis wie ich es richtig machen sollte, denn
Code:
[[\\d]+w]?[\\s]*?[[0-9]+d]?

ist nicht korrekt

Danke

PS. zwischen den zwei werten dürfen auch beliebig viele Lerrzeichen stehen.
d.h
4w 5d ->ist gültig
 
Java:
String regex	= "[\\d]+?[w|d]{1}(((?<=[w])([ ]*?[\\d]+?d{1}))|[ ]*?)";
		
String[] bez	= {"4w 2d", "2d", "23w", "23 4d", "w 5d", "4w      5d"};
		
for(String b : bez) {
	System.out.print("<" + b +"> ist ");
			
if(b.matches(regex))
	System.out.println("gültig");
else
	System.out.println("ungültig");
}

Hat gut denkarbeit gekostet, aber das Ergebnis ist glaube ich richtig:

Code:
<4w 2d> ist gültig
<2d> ist gültig
<23w> ist gültig
<23 4d> ist ungültig
<w 5d> ist ungültig
<4w      5d> ist gültig

MFG

Tomate_Salat
 
Zuletzt bearbeitet von einem Moderator:
Spricht etwas gegen
Java:
String regex    = "(?:\\d+w)?\\s*(?:\\d+d)?";
? Das ist zumindest erstmal einfacher, aber ich hab grad nicht genau nachvollzogen was bei dir alles mit mit Lookbehinds und so gemacht wird... Vielleicht hab ich ja was übersehen 😉
 
ich wollte es [lookbehind] mal ausprobieren (habe noch nicht allzuviel mit regex gemacht und da kam mir das gelegen^^). Nein, ich hab ein Talent, als mal gerne etwas zu kompliziert zu denken. Aber meine tests haben ergeben, dein regex funktioniert genauso gut.
 

Zurück
Oben