Вы имеете в виду вот это?
Regex-1_2 = "(\\{(\\w+)\\})|(\\{([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\})";
EDIT:
Так, что-то вроде этого?
{(((\w+)|({\w+}))\|?)*}
EDIT 2:
Ваш последний комментарий поможет. Итак, работа от начала до конца. Вы знаете, что вы хотите, чтобы соответствовать открывающей фигурной скобке, так что часть легко:
{
Теперь, после первой фигурной скобки, есть два варианта. Либо будет один или несколько буквенно-цифровых символов (или подчеркивание), или будут три группы из нуля или более символов, разделенных по трубам. Первые две группы должны быть не-трубными символами, а последняя группа должна быть не фигурными символами скобок (так как фигурная скобка закрывает выражение). Это может быть выражено с помощью конструкции чере:
{(\w+|[^|]*\|[^|]*\|[^}]*)
Наконец, выражение заканчивается фигурной скобкой:
{(\w+|[^|]*\|[^|]*\|[^}]*)}
Это работает на примере вы предоставили. Если ваши правила отличаются или более конкретны, вам нужно будет сказать это.
Можете ли вы представить пару примеров того, что вы пытаетесь сопоставить? – JDB
rubular.com/r/YxzHacVbtd Regex-1 соответствует только если в фигурных скобках всего 1 значение. Regex-2 соответствует 3 значениям. –