正規表現小文字スクリプトの検証

正規表現小文字スクリプトの検証

入力文字列がすべて小文字であることを確認するために宿題をしています。これが私たちが提供する基本的なスクリプトです。

これが私が変えるべきラインです。

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

[a-z]小文字の 1 つだけを含む項目を入力すると、検証されます。 「Brian [[:lower:]]」は確認しますが、「Cat」は確認しませんが、擁卵だけすれば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:]]+、つまり1つ以上の小文字のみが許可されます。*代わりに in を使用すると、+式が空の文字列と正常に一致するようにすることもできます。

[[:lower:]]また、単一の小文字の一致(単一の小文字の一致)と文字[:lower:]の一致:l、、、、または)の違いにも注意してください。もともとの質問で一致するものは一致しないと言っていましたが、今は意味があります。編集時に式を正しい式に変更し、一致する必要があります。owerBrian[:lower:]cats[[:lower:]]cats


正規表現一致のためにワイルドカード一致が設定されます。

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

globbingパターンでは、!角括弧式の始まりは^正規表現の場合と同じように機能します(グローブパターンでもbash認識されると思いますが)。^

答え2

必要に応じて、次のライナーを確認することもできます。

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

関連情報