入力された文字列がすべて小文字であるかどうかを検証するという宿題に取り組んでいます。提供されている基本的なスクリプトは次のとおりです。
変更する必要がある行は次のとおりです。
if [[ "$input" =~ Add your regular expression here ]]
[a-z]
小文字を 1 つだけ含む入力は有効になります。「Brian」は有効[[:lower:]]
ですが、「cats」は有効になりませんが、意味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]
1文字と一致します。ない a
、b
、 またはc
。
あるいは、文字列の両端をアンカーして、文字列全体の長さを一致させます。
if [[ "$input" =~ ^[[:lower:]]+$ ]]; then
# contain only lower case letters
fi
式の先頭^
の は文字列の先頭にのみアンカーし、$
末尾の は文字列の末尾にアンカーします。 これらの間には、 を使用した小文字のみ[[:lower:]]+
、つまり 1 つ以上の小文字のみが許可されます。*
の代わりにを使用すると+
、式は空の文字列にも正常に一致します。
[[:lower:]]
また、 (1 つの小文字に一致) と ( 、、、、、またはの[:lower:]
いずれかの文字に一致)の違いにも注意してください。元の質問では、はに一致し、は一致しないとおっしゃっていましたが、これで意味がわかるはずです。編集で、式を正しい に変更したので、も一致するようになりました。:
l
o
w
e
r
Brian
[:lower:]
cats
[[:lower:]]
cats
正規表現の一致にグロブ一致を適用すると、次のようになります。
if [[ "$input" == *[![:lower:]]* ]]; then
# contains something that is not a lower case letter
else
# contain only lower case letters
fi
グロビング パターンでは、!
括弧で囲まれた式の先頭の は、^
正規表現の場合と同じように機能します (ただし、グロビング パターンでbash
も が認識されると思います)。^
答え2
必要に応じて、このワンライナーで確認することもできます。
echo "$input" | grep -qE '^[[:lower:]]*$' && echo "All LowerCase" || echo "Not All LowerCase"