regex - проверить пользовательский ввод для различных комбинаций - PullRequest
0 голосов
/ 16 апреля 2020

Я хотел бы иметь регулярное выражение, которое может фиксировать некоторые определенные комбинации для четырех слов, предоставленных пользователем. Слова разделяются только запятой или пробелом.

возможные слова:

  1. нет
  2. объединить
  3. онлайн
  4. магазин

Возможные комбинации: если ни один из них не присутствует, тогда ничего другого не должно существовать в пользовательском вводе. Если он-лайн или магазин присутствуют (1 или оба), то объединение должно существовать и наоборот.

Вот несколько примеров:

  • нет (catch)
  • нет комбайн (не ловить)
  • комбайн онлайн (ловить)
  • комбайн (не enter code here ловить)
  • комбайн интернет-магазин (ловить)
  • хранить в Интернете (не перехватывать) (потому что комбинат отсутствует)
  • хранить в магазине (не перехватывать)

Мой регулярный код до сих пор Регулярный запрос попытаться ^(?:none|combine|online|store| |,)+$ Но это может поймать только простую комбинацию всех этих 4-х слов. Она не улавливается, если ее нет, или для дубликатов, таких как магазин.

Это время l oop в bash пока пользователь не введет правильные данные.

read -p "Please provide with the geos that were successfully modeled (Please provide the geos separated with space or comma. e.g.: \'combine online\') " user_input2

while [[ $(echo ${user_input2,,} | grep -P -e '^(?:none|combine|online|store| |,)+$' | wc -l) -lt 1 ]]; do
read -p "Please adhere to the instructions and provide a correct input ('combine[ ,]store[ ,]online'): " user_input2
done

1 Ответ

1 голос
/ 16 апреля 2020

Используйте gm модификаторы регулярных выражений со следующим шаблоном регулярных выражений:

^(?=(?:(?:none|combine|online|store)(?:\s|$))+$)(?!(?:combine.*combine|online.*online|store.*store))(none$|(?!.*none)(?=.*online|.*store).*combine.*)

https://regex101.com/r/z58QrH/1


Зависит от движка регулярных выражений вы можете использовать соответствующий синтаксис этого решения регулярных выражений.

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