regex - 如何使用正则表达式验证内部版本号
问题描述
我有一个 DGTS_2.11.2311231231 格式的内部版本号,如果格式不匹配,我想验证输入并退出,我试图创建这样的东西,但它不起作用,请帮助我
version=$1
version_checked=$(echo $version | sed -e 'DGTS_\/[0-9]\+\.[0-9]{1,2}\+\.[0-9]{1,10}/d')
version_checked=DGTS_*
if [[ -z $version_checked ]]; then
echo "$version is the right format"
else
echo "$version_checked is not in the right format, please use XX.XX.XX format (ie: DGTS_2.10.3)"
exit
如果输入格式不正确,此代码段未验证
解决方案
我假设前两个数字区域可以是一位或两位数字,而最后一个数字区域在 1-10 范围内。您的程序逻辑和语法存在一些不适用于我删除的正则表达式本身的问题:
#!/bin/bash
version=$1
if [[ $version =~ ^DGTS_([0-9]{1,2}\.){2}[0-9]{1,10}$ ]]; then
echo "$version is the right format"
else
echo "$version is not in the right format, please use XX.XX.XX format (ie: DGTS_2.10.3)"
exit
fi
根据您的要求,这是一个与可选的第四象限一起使用并允许DGTS_2.11.0.4661505
通过的正则表达式:
^DGTS_([0-9]{1,2}\.){2}[0-9]{1,10}(\.[0-9]{1,10})?$