Regex | Muster {a}{b}{c}

Dit_

Bekanntes Mitglied
Hallo,

ich moechte einen String der Form {wert_1}{wert_2}{wert_3} "splitten", so dass ich dann,
wert_1, wert_2 und wert_3 ohne Klammern habe.

Soweit bin ich:

Java:
public static void main(String[] args) throws Exception{
        String test = "{bla}{blo}{bli}";
        Scanner sc = new Scanner(test);
        sc.useDelimiter("[(\\{).(\\})+]");
        
        while(sc.hasNext()){
            System.out.println("'"+sc.next()+"'");
        }
        
    }


OUTPUT
'bla'
''
'blo'
''
'bli'

Wie kann ich pattern ändern damit nur der Inhalt der Klammer rausgeschnitten wird.
"\\w" statt "." habe ich auch schon versucht.

Danke schon mal
 
Habe es etwas falsche gelesen. Gibt es einen Grund, warum du es über den Delimiter von der Scanner Klasse machen willst? Du kannst doch auch einfach den Matcher nehmen
 
Code:
"[{.}]+"

liefert alle 3 Werte, ist schon mal super, danke.

Es koennte aber sein das einer der Werte leer ist:
Code:
{bla}{}{bli}

kann man da was machen dass ich trotzdem drei Werte bekomme?

@XHelp
hm ich dachte Scanner arbeitet mit Matcher und Co,
fand Scanner irgendwie eleganter 😳
 
Zuletzt bearbeitet:
Java:
Pattern pattern = Pattern.compile("\\{(.*?)\\}");
Matcher matcher = pattern.matcher("{bla} xc {}{bli}");
while(matcher.find())
	System.out.println(matcher.group(1));
 
Ich persönlich finde es wiederum nicht elegant Scanner-Delimiter zu verwenden um eine Gruppe bei RegEx auszuwerten. z.B. folgenden String
Code:
"}bla{fds{bli{"
würde der Scanner auch in 3 Werte splitten.
Finde für diesen Zweck:
Java:
Matcher matcher = Pattern.compile("\\{(.*?)\\}").matcher(text);
while ( matcher.find() ) {
  System.out.println("'"+matcher.group(1)+"'");
}
nachvollziehbarer.

Edit: zu spät
 

Zurück
Oben