正则表达式匹配,但脚本意外失败?



我有这个正则表达式,以匹配版本号:

^[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