我正在做一项家庭作业,以验证输入的字符串是否全部为小写字母。这是我们提供的基本脚本。
这是我需要更改的行。
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"