我正在做一項家庭作業,以驗證輸入的字串是否全部為小寫字母。這是我們提供的基本腳本。
這是我需要更改的行。
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:]]+
,即一個或多個小寫字母。使用*
in 代替+
也可以使表達式成功匹配空字串。
[[:lower:]]
另請注意(匹配單個小寫字母) 和[:lower:]
匹配字元:
、l
、o
、w
、e
或)之間的差異r
。在最初的問題中,您說 that與while isn'tBrian
匹配,現在應該有意義了。在編輯中,您將表達式變更為正確的,現在也應該匹配。[: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"