我有这个正则表达式,以匹配版本号:
^[1-9]d{0,1}.(?!0d)d{1,3}.(?!0d)d{1,4}$
正则表达式本身工作并匹配"1.0.0"在RegexChecker上检查时然而,当我尝试在bash脚本中包装相同的正则表达式时,我的代码会进入"else"条件。我不明白为什么?
#!/bin/bash
VERSION='1.0.0'
MATCH_PATTERN='^[1-9]d{0,1}.(?!0d)d{1,3}.(?!0d)d{1,4}$'
if [[ $VERSION =~ $MATCH_PATTERN ]]; then
:
else
echo "Version number format is wrong."
exit 1
fi
我尝试使用set -x
运行调试器,但没有运气。有什么建议吗?
bash shell正则表达式是POSIX扩展正则表达式,不支持数字的d
或负查找的(?!...)
d
可替换为[0-9]
或[:digits:]
(?!0d)
可以替换为0或不以0开头的数字(0|[1-9][0-9]{0,2})
模式^[1-9][0-9]{0,1}.(0|[1-9][0-9]{0,2}).(0|[1-9][0-9]{0,3})$
应该匹配前面提到的PCRE表达式。
#!/bin/bash
VERSION='1.0.0'
MATCH_PATTERN='^[1-9][0-9]{0,1}.(0|[1-9][0-9]{0,2}).(0|[1-9][0-9]{0,3})$'
if [[ $VERSION =~ $MATCH_PATTERN ]]; then
:
else
echo "Version number format is wrong."
echo 1
fi