Регулярное выражение, повторяющее шаблоны - PullRequest
1 голос
/ 10 февраля 2020

Я пытаюсь разработать регулярные выражения для проверки синтаксиса написания вопросов для модуля викторины.

Один из типов вопросов - это перетаскивание, которое имеет формат ...

the {rain} falls gently on the {plain}

... где термины в скобках являются перетаскиваемыми. Должен быть хотя бы один термин в скобках, но они могут быть в любом месте строки. Между скобками не должно быть ничего. Таким образом, любое из следующего является действительным ...

{the} rain falls gently on the plain

the rain falls gently on the {plain}

{the} {rain} {falls} {gently} {on} {the} {plain}

{the }{rain }{falls }{gently }{on }{the }{plain}

Кроме того, чтобы усложнить ситуацию, внутри скобок не должно быть квадратных скобок - это еще один тип вопроса. Итак ...

{the} {rain}

... в порядке, но ...

{the} {[rain]}

... нет и любая другая комбинация.

Пока у меня есть это, но оно явно не работает: (

(.*\{.*\})+

Пожалуйста, кто-нибудь может мне помочь?

1 Ответ

1 голос
/ 11 февраля 2020

Если { и } не могут быть между {} и квадратные скобки могут присутствовать вне фигурных скобок, но не внутри, вы можете использовать:

^[^\r\n{}]*(?:{[^\][\r\n{}]*}[^\r\n{}]*)+$
  • ^ Начало строки
  • [^\r\n{}]* Повторите 0+ раз любой символ, кроме символа новой строки или { и }
  • (?: Группа без захвата
    • {[^\][\r\n{}]*} Совпадение {, затем 0+ раз любой символ кроме новой строки или любой из []{}
    • [^\r\n{}]* Совпадение 0+ раз любой следующий символ, кроме новой строки или { и }
  • )+ Закрыть группу и повторить не менее 1 или более раз, чтобы убедиться в наличии перетаскиваемого {...}
  • $ Конец строки

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...