我正在尝试在bash中使用正则表达式,但我无法理解为什么这个后续场景不起作用:
Regexp:
REGEXP="^(test\/)(([a-zA-Z]+)\-)+(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$"
字符串:
STRING="test/test-ods-1.10.1"
测试:
if [[ "$STRING" =~ $REGEXP ]]
then
echo "match!"
else
echo "don't match"
fi
通常在这种情况下,我应该收到“匹配”,但它总是返回“不匹配”。
答案 0 :(得分:3)
\d
。将它们替换为[0-9]
,它将起作用:
$ [[ "test/test-1.10.1" =~ ^(test\/)(([a-zA-Z]+)\-)+(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$ ]]; echo $?
1
$ [[ "test/test-1.10.1" =~ ^(test\/)(([a-zA-Z]+)\-)+(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)\.(0|[1-9][0-9]*)$ ]]; echo $?
0
在POSIX中没有定义速记类,GNU扩展只根据regular-expressions.info带来一些,\w
,\W
,\s
和\S
}。