这个正则表达式总是在 shell 脚本中检查false
尽管它匹配$LIST
values.
#!/usr/bin/env bash
LIST="AB,CD,EF" # Valid value and should print "VALID!"
if [[ ! "$LIST" =~ ^[A-Z]{2}(?:,[A-Z]{2})*$ ]]
then
echo "INVALID"
else
echo 'VALID!'
fi
For the regex
, 一些无效的$LIST
值将是AB,CD,EF,
, AB,CD,ef
.
这可能是什么原因?
你的正则表达式:
^[A-Z]{2}(?:,[A-Z]{2})*$
不符合 POSIX 正则表达式,因为(?:...)
BASH 正则表达式不支持(非捕获组)POSIX 扩展正则表达式.
请改用捕获组:
^[A-Z]{2}(,[A-Z]{2})*$
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)