Эта часть (?:abc)
будет соответствовать строке abc
и не нуждается в группе без захвата. Это не будет соответствовать ни a, ни ab и т. Д.
Одним из вариантов может быть использование группы захвата и класса символов, повторяющих 1 или более раз любой из перечисленных [abcd]+
, который также может быть aaa, если это нормально.
\{[^{}]*\[([abcd]+)\][^{}]*\}
По частям
\{
Совпадение {
[^{}]*
Совпадение 0+ раз, а не {
или }
\[
Совпадение [
([abcd]+)
Захват группа 1 , совпадение 1+ раз с любым из перечисленных \]
Совпадение ]
[^{}]*
совпадение 0+ раз не {
или }
\}
совпадение }
см. Regex demo
Если вы хотите сопоставить только abc ab c или d, вы также можете использовать чередование, сопоставляющее ab с необязательным c, или c или d
\{[^{}]*\[(abc?|c|d)\][^{}]*\}
Regex demo