Я не уверен, что именно вы спрашиваете, и ваше регулярное выражение не очень помогает в предоставлении дополнительной информации.
Однако, если скобки не могут быть вложенными, и вы не хотите обрабатывать экранированные скобки, тогда регулярное выражение довольно простое.
Примечание: даже ваше последнее регулярное выражение (возможно, следовало бы просто отредактировать ваше сообщение вместо того, чтобы отвечать самому себе: \\S+\\s*[=]\\s*[{].*[},]
Делает некоторые вещи, в которых нет необходимости, это, безусловно, испортит вас. Чрезмерное использование [ ] стиль классов персонажей, вероятно, сбивает вас с толку. Ваш последний [},] действительно говорит «сопоставление символов»} или «,», что, я уверен, не совсем то, что вы имеете в виду.
Регекс, похоже, любимый мальчик для битья, но я думаю, что здесь уместно.
Pattern p = Pattern.compile( "\\s*([^={}]+)\\s*=\\s*{([^}]+)},?" );
Matcher m = p.matcher( someString );
while( m.find() ) {
System.out.println( "name:" + m.group(1) + " value:" + m.group(2) );
}
Регулярное выражение распадается на:
- Любой предшествующий пробел.
- Первая группа захвата - это строка ненулевой длины, содержащая только символы, которые НЕ '=', '{' или '}'
- Любые промежуточные пробелы.
- '='
- Любые промежуточные пробелы.
- '{'
- Вторая группа захвата - это строка ненулевой длины, содержащая только символы, которые не являются закрывающими '}'
- '}'
- Дополнительно ','
Это регулярное выражение должно работать более эффективно, чем версии. *, Потому что ему легче выяснить, где остановиться. Я также думаю, что это понятнее, но я говорю на регулярном языке в разговорной речи. :)