我想检查字符串,因此它只包含字符0-9 a-z -
。
当我这样做时
regex='[-a-z0-9]*'
string='abcd!'
if [[ $string =~ $regex ]]
then
echo "valid"
else
echo "not valid"
fi
它输出valid
,我预期not valid
,因为$string
包含!
。
答案 0 :(得分:4)
试试这个:regex='^[-a-z0-9]*$'
。它将强制整行与此类匹配。否则,只有一个匹配或根本没有匹配(由于*
)将返回有效。 ^...$
表示字符串的开头和结尾没有任何匹配的内容。
答案 1 :(得分:1)
您必须为此正则表达式添加边界才能工作。
'[ - a-z0-9] *'表示:在字符串中的任何位置匹配这些字符0次或更多次。
因此,在正则表达式中添加行尾字符可以满足您的需求:
regex='^[-a-z0-9]*$'
下一步是将' - '的出现次数限制为仅一次。破折号字符可以出现在字符串的开头还是结尾?如果没有尝试:
regex='^[a-z0-9]*-?[a-z0-9]*$'
希望这有帮助。