2016-07-07 4 views
3

Мне нужно проверить ввод пользователя, который может содержать круглые скобки, слово «или» и слово «и».Как создать регулярное выражение для проверки выражения пользователя, которое включает в себя некоторые команды?

Правила просты:

1- Скобки можно использовать в любом месте, но открывающие скобки должно быть закрытие один (я мог бы подтвердить эту часть с кодом). 2- Выражение никогда не должно заканчиваться на «или» или «и» внутри блока. Например:

Джон и Джейн -> OK

Джон и -> NOT OK

(Джон и) -> NOT OK

Джон или -> NOT OK

(Джон или) -> НЕ ОК

Так оно всегда:

[Дополнительные скобки] WORD [Возможность работы и или] [Необязательно] Скобки

Я придумал это, но это не достаточно, но это начало.

\b\w.*(?=or|and).*\w 

Это работает для содержания со скобками

Примечание: Я не забочусь о количестве пробелов между словами.

Пользователь может комбинировать эти блоки выражения несколько раз.

+2

Have A посмотрите на ''^\ w + (?: \ s + (?: или | и) \ s + \ w +) * $ '] (https://regex101.com/r/gD8eW5/1). Вместо '\ w +' вы можете иметь '(?: John | Jane)'. –

+0

Если должны быть необязательные круглые скобки: ['^ \ (? \ W + (?: \ S + (?: Или | и) \ s + \ w +) * \)? $'] (Https://regex101.com/r/gD8eW5/2). –

ответ

1
^\(?((\w+|\((?1)\))\s+(?>and|or)\s+(\w+|\((?1)\)))\)?$ 

Я не думал, что это можно сделать, но затем я нашел рекурсию. https://regex101.com/r/aD7dT0/4

EDIT 1: Это было сломано, фик его

EDIT 2: Сделаны лучше регулярное выражение + он делает проверку скобки, за исключением круглых скобок вокруг всего заявления

+0

Im собирается очистить это, его довольно грубо, как и https://regex101.com/r/aD7dT0/2 –

+0

TIL все о рекурсии regex, выкрики для отладчика регулярных выражений на regex101 –

+0

Отличная работа, не думал, что это может быть сделано, отлично! –

Смежные вопросы