Я работаю над домашним заданием, чтобы проверить, содержит ли введенная строка все строчные буквы. Вот базовый скрипт, который нам предоставлен.
Вот строчка, которую мне нужно изменить.
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 cats
was'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"