Regex сохраняет жадность даже при использовании ленивого квантификатора

1

Вот мое регулярное выражение ^((\{.+:.+\})|([^{:}]))+?$.

Вот что я хочу:
Действительный случай: {test:test1} {test2:test3} test4 test5.
Недопустимый случай: {test:}, {test1: test2, test1: test3}.

Это означает, что всякий раз, когда моя строка имеет один из этих трех символов: '{' ':', '}' он также должен иметь 2 символа повторения.

Мое регулярное выражение работает хорошо, когда моя строка не заканчивается символом }. Я думаю, это из-за жадного квантификатора. Но я уже положил ? символ после + квантификатор все еще не работает. Что я делаю неправильно?

  • 0
    Попробуйте вместо этого [^}]+ .+ Внутри (\{.+:.+\})
  • 0
    Попробуйте ^(?:\{[^{}:]*:[^:{}]*}|[^{:}])+$ , См. Демонстрацию
Показать ещё 1 комментарий
Теги:

1 ответ

1
Лучший ответ

Вы можете использовать

^(?:\{[^{}:]*:[^:{}]*}|[^{:}])+$

См. Демо-версию regex.

подробности

  • ^ - начало строки
  • (?:\{[^{}:]*:[^:{}]*}|[^{:}])+ - не захватывающая группа, соответствующая 1 или более вхождению
    • \{[^{}:]*:[^:{}]*} - это {, то все 0+, кроме символов {, } и :, то :, то все 0+ символы, кроме {, } и : и }
    • | - или же
    • [^{:}] - любой символ, но {, } и :
  • $ - конец строки.
  • 0
    большое спасибо!!!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню