Чтобы выполнить задачу, вы должны работать как с отрицательными, так и с положительными взглядами:
^(?:{(?=[^{}]*[UG])([UGWRB])\/(?!\1)(?1)})+$
Смотрите демо здесь
Обратите внимание, что флаг m
должен быть установлен.
Распределение регулярных выражений:
^
Соответствует началу входной строки
(?:
Начало группы без захвата
{
Матч {
буквально
(?=
Начало позитивного взгляда
[^{}]*[UG]
Ищите [UG] в комбинации
)
Конец предвкушения
([UGWRB])
Совпадение и захват буквы из класса символов
\/(?!\1)(?1)
Совпадение /
и посмотрите, не совпадает ли следующий символ с недавно захваченным
}
Совпадение }
буквально
)+
Конец группы, повторите хотя бы один раз
$
Соответствует концу входной строки