Вот мое регулярное выражение ^((\{.+:.+\})|([^{:}]))+?$
.
Вот что я хочу:
Действительный случай: {test:test1} {test2:test3} test4 test5
.
Недопустимый случай: {test:}
, {test1: test2
, test1: test3}
.
Это означает, что всякий раз, когда моя строка имеет один из этих трех символов: '{' ':', '}'
он также должен иметь 2 символа повторения.
Мое регулярное выражение работает хорошо, когда моя строка не заканчивается символом }
. Я думаю, это из-за жадного квантификатора. Но я уже положил ?
символ после +
квантификатор все еще не работает. Что я делаю неправильно?
Вы можете использовать
^(?:\{[^{}:]*:[^:{}]*}|[^{:}])+$
См. Демо-версию regex.
подробности
^
- начало строки(?:\{[^{}:]*:[^:{}]*}|[^{:}])+
- не захватывающая группа, соответствующая 1 или более вхождению \{[^{}:]*:[^:{}]*}
- это {
, то все 0+, кроме символов {
, }
и :
, то :
, то все 0+ символы, кроме {
, }
и :
и }
|
- или же[^{:}]
- любой символ, но {
, }
и :
$
- конец строки.
[^}]+
.+
Внутри(\{.+:.+\})
^(?:\{[^{}:]*:[^:{}]*}|[^{:}])+$
, См. Демонстрацию