# Verschachteln von REGEX



## AmunRa (20. Aug 2010)

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

```
[\\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 

```
[[\\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


----------



## Tomate_Salat (20. Aug 2010)

```
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:


```
<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


----------



## AmunRa (21. Aug 2010)

Vielen Vielen Dank.

Ich hab hier noch ein paar Testfälle und die haben auch alle gepasst.


Danke


----------



## Illuvatar (21. Aug 2010)

Spricht etwas gegen

```
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


----------



## Tomate_Salat (21. Aug 2010)

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.


----------

