fork(1) download
  1. import java.util.*;
  2. import java.lang.*;
  3. import java.io.*;
  4. import java.util.regex.*;
  5.  
  6. class Ideone
  7. {
  8. public static void main (String[] args) throws java.lang.Exception
  9. {
  10. String input = "Москва [Мск, Белокаменная] {msk.com}, Санкт-Петербург [Спб, Питер], Ростов, Калининград [Кёниг] {123.com}\nРостов {123.com}";
  11. Pattern pattern = Pattern.compile("(?U)(\\w+(?:-\\w+)*)(?:\\s*(?:\\[([^\\]\\[]*)]))?(?:,?\\s*\\{([^{}]*)\\})?");
  12. Matcher matcher = pattern.matcher(input);
  13. while (matcher.find()){
  14. System.out.println("-------------\nСовпадение: " + matcher.group());
  15. System.out.println("Подмаска №1: " + matcher.group(1));
  16. if (matcher.group(2) != null) {
  17. System.out.println("Подмаска №2: " + matcher.group(2));
  18. }
  19. if (matcher.group(3) != null) {
  20. System.out.println("Подмаска №3: " + matcher.group(3));
  21. }
  22. }
  23. }
  24. }
Success #stdin #stdout 0.11s 36712KB
stdin
Standard input is empty
stdout
-------------
Совпадение: Москва [Мск, Белокаменная] {msk.com}
Подмаска №1: Москва
Подмаска №2: Мск, Белокаменная
Подмаска №3: msk.com
-------------
Совпадение: Санкт-Петербург [Спб, Питер]
Подмаска №1: Санкт-Петербург
Подмаска №2: Спб, Питер
-------------
Совпадение: Ростов
Подмаска №1: Ростов
-------------
Совпадение: Калининград [Кёниг] {123.com}
Подмаска №1: Калининград
Подмаска №2: Кёниг
Подмаска №3: 123.com
-------------
Совпадение: Ростов {123.com}
Подмаска №1: Ростов
Подмаска №3: 123.com