Проверка скрипта в нижнем регистре Regex

Проверка скрипта в нижнем регистре Regex

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

Вот строчка, которую мне нужно изменить.

if [[ "$input" =~ Add your regular expression here ]]

Если я [a-z]ввожу что-либо, содержащее только одну строчную букву, это будет проверено. С [[:lower:]]"Брайаном" это будет проверено, а с "кошками" это не будет, но тарабарщина, такая как " trhrhэто нормально". Я не знаю, какое регулярное выражение здесь использовать. Я был бы очень признателен за любую помощь.

решение1

Проверьте, содержит ли строка что-либо, что являетсянетстрочная буква.

if [[ "$input" =~ [^[:lower:]] ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

или,

if ! [[ "$input" =~ [^[:lower:]] ]]; then
    # contain only lower case letters
fi

Символ ^в начале выражения в квадратных скобках меняет смысл соответствия на противоположный, так что он [^abc]соответствует любому отдельному символу, который находитсянет a, b, или c.

В качестве альтернативы можно выровнять всю длину струны, закрепив ее на обоих концах:

if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
    # contain only lower case letters
fi

В начале ^выражения привязывается только к началу строки, а $в конце привязывается к концу строки. Между ними мы разрешаем использовать только строчные буквы [[:lower:]]+, т. е. одну или несколько строчных букв. Использование *вместо +позволит выражению успешно сопоставляться и с пустой строкой.

Обратите внимание также на разницу между [[:lower:]](соответствует одной строчной букве) и [:lower:]соответствует одному из символов :, l, o, w, e, или r). В исходном вопросе вы сказали, что Brianбыло сопоставлено с [:lower:]while catswas't, что теперь должно иметь смысл. В редактировании вы изменили выражение на правильное [[:lower:]], и catsтеперь также должно быть сопоставлено.


При наличии подстановочного соответствия для соответствия регулярному выражению:

if [[ "$input" == *[![:lower:]]* ]]; then
    # contains something that is not a lower case letter
else
    # contain only lower case letters
fi

В шаблоне подстановки !в начале выражения в квадратных скобках работает так же, как и ^в случае с регулярным выражением (хотя я полагаю, что bashтакже распознает ^его в шаблонах подстановки).

решение2

Вы также можете проверить это с помощью этого One Liner, если хотите:

echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"

Связанный контент