# Suche nach strings zwischen eckigen Klammern mittels regulärer Ausdrücke



## wannasee (16. Jun 2009)

Hallo Leute, 

bin Java-Anfänger und habe ein kleines Problem mit regulären Ausdrücken. Im folgenden beschreibe ich das Problem:

1- Ich habe einen einfachen Satz. Einige Wörter in diesem Satz stehen zwischen eckigen Klammern, z.B "Ich [esse] und [schlafe]"
2- mein Ziel ist nur die strings zwischen eckigen klammern zu finden und zwar als "match word only" mittels regulären Ausdrücken aus dem Packagejava.util.regex.;.
Dafür habe ich folgenden Code geschrieben:

*Pattern findStringinSquareBrackets = Pattern.compile("\\[.\]");
Matcher matcherOfWordInSquareBrackets = findStringinSquareBrackets.matcher("Ich [esse] und [schlafe]");
//Iteration in the string
while ( matcherOfWordInSquareBrackets.find() )
{
System.out.println("Patter found! :" outputField.getText().substring(matcherOfWordInSquareBrackets.start(), matcherOfWordInSquareBrackets.end())"");	
}
*
3- Mit dem im Punkt 2 beschriebenen Code bekomme ich aber folgendes Ergebnis: Patter found!: [esse] *und* [schlafe]
D.h. nicht nur die strings zwischen eckigen Klammern, sondern auch das Wort "und". Das ist aber nicht das, was ich möchte.

4- Was ich als Ergebnis haben möchte, ist folgendes:
Patter found!: [esse]
Patter found!: [schlafe]
Also zwei Treffer von den strings zwischen eckigen Klammern. Nicht mehr, nicht weniger

Weiß jemand wie man so etwas programmiert? Jede Hilfe ist willkommen.
Vielen Dank im voraus.

N.B: benutze java 6

Abou


----------



## Landei (16. Jun 2009)

*Müssen* es unbedingt Regex sein?

(ungetestet)

```
String s = "Ich [esse] und [schlafe]";
List<String> matches = new ArrayList<String>();
StringBuilder sb = new StrignBuilder();
for(char c : s.toCharArray()) {
   if(sb.length() > 0) {
     if(c == ']') {
        sb.append(c);
        matches.add(sb.toString());
        sb.setLength(0);
     } else {
       sb.append(c);
     }
   } else if (c == '[') {
     sb.append(c);
   }
}
```


----------



## bygones (16. Jun 2009)

weil der code kuerzer ist ;-)

dumm ist halt das [ ] Sonderzeichen in regex sind


```
String whitelist = "Ich [esse] und [schlafe]";
        Pattern p = Pattern.compile("(\\[[^\\]]+\\])");
        Matcher matcher = p.matcher(whitelist);

        while(matcher.find()) {
            System.out.println(matcher.group(0));
        }
```


----------



## wannasee (16. Jun 2009)

Hallo Alle, 

Danke für Eure Hilfe. Ich habe es nun geschafft dank Eure Hilfe.

Tausend dank.


----------

