# Regex für geschweifte Klammern?



## Extremefall (24. Mrz 2011)

Hallo,
ich habe leider noch ein paar Probleme mit dem Regex Befehl und hoffe, dass ihr mir weiterhelfen könnt. Wie kann ich nach einem String suchen, der mit { anfängt und } aufhört. Ein kleiner Versuch war folgendes:

```
/^\{|\}+$/
```

Die Anleitungen im Web haben mir leider noch nicht weitergeholfen. Könnt ihr mir sagen, wie der Befehl lauten müsste und warum so?

MfG


----------



## muemmel_0811 (24. Mrz 2011)

ich würde nach 
	
	
	
	





```
\{.*\}
```
 suchen

edit: zur Frage, warum: weil man mit 
	
	
	
	





```
.*
```
 alle Zeichen, egal ob Buchstabe, Zahl, Sonderzeichen oder was auch immer, erfasst, die zwischen den { } stehen


----------



## Haave (24. Mrz 2011)

Müsste so gehen:

```
\{.*\}
```
Wenn du es als String hast, musst du die Backslashes nochmal extra escapen.

Edit: zu spät…


----------



## AmunRa (24. Mrz 2011)

String s= "\\{(.*?)\\}";



wenn ich nicht komplett daneben liege


----------



## Gonzo17 (24. Mrz 2011)

AmunRa hat gesagt.:


> String s= "\\{(.*?)\\}";
> 
> 
> 
> wenn ich nicht komplett daneben liege



Wozu denn das '?' ?

Das Sternchen '*' beinhaltet doch schon, dass kein Zeichen in den geschweiften Klammern vorkommen kann.


----------



## Extremefall (24. Mrz 2011)

Vielen Dank. Da wäre ich nicht drauf gekommen, dass es so einfach gehalten werden kann.


----------



## AmunRa (24. Mrz 2011)

Gonzo17 hat gesagt.:


> Wozu denn das '?' ?



in irgend einem Tutorial hab ich mal gelesen dass man das so machen soll und seit dem Mach ich es

da es nicht flasch ist hab ich es mir so angewöht dass ich den REGEX für "irgendeinzeichen" immer so schreibe  .*?


----------



## Michael... (24. Mrz 2011)

Gonzo17 hat gesagt.:


> Wozu denn das '?' ?


Das *?* beeinflusst die "Gier" des Quantors, z.B:

```
Matcher matcher = Pattern.compile("\\{.*\\}").matcher("{test1}{test2}");
while(matcher.find())
	System.out.println(matcher.group());

matcher = Pattern.compile("\\{.*?\\}").matcher("{test1}{test2}");
while(matcher.find())
	System.out.println(matcher.group());
```


----------



## AmunRa (24. Mrz 2011)

@Michael
Danke cool dann weiß ich das auch wieder warum ich das damals gebraucht habe


----------



## Gonzo17 (24. Mrz 2011)

Hab mir angeschaut, was es ausgibt, aber kann mir gerade nicht erklären, warum das so ist. Wie kann man das logisch erklären? Denn ob mit oder ohne ?, der reguläre Ausdruck matched doch eigentlich immer den gesamten Ausdruck "{test1}{test2}" und nicht erst "{test1}" und dann "{test2}" ???:L


----------



## Michael... (24. Mrz 2011)

Das *?* hat bei regulären Ausdrücken mehr als eine Bedeutung, z.B. als Quantor wie + oder *

Quantoren - speziell *+* und *** - sind standardmässig "gierig". D.h. es wird versucht soviel wie möglich auf einmal abzudecken. Hier kommt eine weitere Funktion des *?* ins Spiel. Um nur die minimale Übereinstimmung abzudecken, kann einem Quantor ein *?* nachgestellt werden.

Im zuvor geposten Bsp. bedeutet das, dass der RegEx mit *?* nur bis zum nächsten Vorkommen von *}* "sucht".
Wenn es darum geht nur festzustellen, ob ein bestimmter Ausdruck in einer Zeichenkette vorkommt, ist es meist nicht notwendig. Wenn aber die Zeichenkette mittels RegEx analysiert oder zerlegt werden soll, macht es doch einen Unterschied ;-)


----------

