import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.*;

class Ideone
{
	public static void main (String[] args) throws java.lang.Exception
	{
		String input = "Москва [Мск, Белокаменная] {msk.com}, Санкт-Петербург [Спб, Питер], Ростов, Калининград [Кёниг] {123.com}\nРостов {123.com}";
		Pattern pattern = Pattern.compile("(?U)(\\w+(?:-\\w+)*)(?:\\s*(?:\\[([^\\]\\[]*)]))?(?:,?\\s*\\{([^{}]*)\\})?");
		Matcher matcher = pattern.matcher(input);
		while (matcher.find()){
		    System.out.println("-------------\nСовпадение: " + matcher.group());
		    System.out.println("Подмаска №1: " + matcher.group(1));
		    if (matcher.group(2) != null) {
		        System.out.println("Подмаска №2: " + matcher.group(2)); 
		    }
		    if (matcher.group(3) != null) {
		        System.out.println("Подмаска №3: " + matcher.group(3)); 
		    }
		} 
	}
}