so.*_*red 2 bash regular-expression test
考虑以下脚本:
#! /bin/bash
line="confusing"
if [[ $line =~ [[:lower:]]* ]]
then
echo "matches!"
else
echo "does not match."
fi
Run Code Online (Sandbox Code Playgroud)
虽然以上产生了预期的结果,但以下不会:
#! /bin/bash
line="CoNfUsInG"
if [[ $line =~ [[:lower:]]* ]]
then
echo "matches!"
else
echo "does not match."
fi
Run Code Online (Sandbox Code Playgroud)
这会打印“匹配!”
我很迷惑; 正则表达式不是[[:lower:]]*
表示零个或多个小写字母吗?
当以下内容也打印“matches!”时,它会变得更加混乱。
#! /bin/bash
line="CoNfUsInG"
if [[ $line =~ [[:digit:]]* ]]
then
echo "matches!"
else
echo "does not match."
fi
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么会发生这种情况?
cho*_*oba 10
正则表达式不必匹配整个字符串。这就是为什么你有^
和 分别$
用于字符串的开头和结尾。
[[ CoNfUsInG =~ ^[[:lower:]]*$ ]] || echo no
Run Code Online (Sandbox Code Playgroud)
混淆,^[[:lower:]]*
(没有$
)仍然匹配,因为在字符串的开头有零个小写字母。