我有这个正则表达式,以匹配版本号:
^[1-9]\d{0,1}\.(?!0\d)\d{1,3}\.(?!0\d)\d{1,4}$
正则表达式本身可以工作,当在RegexChecker上检查时匹配“1.0.0”。但是,当我试图在bash脚本中 Package 相同的正则表达式时,我的代码进入“else”条件。我不明白为什么?
#!/bin/bash
VERSION='1.0.0'
MATCH_PATTERN='^[1-9]\d{0,1}\.(?!0\d)\d{1,3}\.(?!0\d)\d{1,4}$'
if [[ $VERSION =~ $MATCH_PATTERN ]]; then
:
else
echo "Version number format is wrong."
exit 1
fi
我试着用set -x
运行调试器,但没有成功。有什么建议吗?
1条答案
按热度按时间nwsw7zdq1#
bash shell正则表达式是POSIX扩展的正则表达式,不支持
\d
用于数字,也不支持(?!...)
用于负lookaheads\d
可以替换为[0-9]
或[:digits:]
(?!0\d)
可以替换为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表达式匹配。