使用bash,我可以检查变量的值是否与正则表达式匹配。但是,我找不到返回匹配部分的方法。这可能吗?
例如,将$test
作为test="123456-name-goes-here.1.2.3-something.zip"
,我想要返回的部分是1.2.3-something
。
使用下面的代码,我可以成功匹配$test
,但我不知道从哪里开始。
[[ $test =~ ([0-9]\.[0-9](\.[0-9])?(\.[0-9])?)(-[a-z-]*)? ]] && echo "matched"
答案 0 :(得分:5)
$BASH_REMATCH[0]
将包含您需要的值:
test="123456-name-goes-here.1.2.3-something.zip"
reg="[0-9]\.[0-9](\.[0-9])?(\.[0-9])?(-[a-z-]*)?"
if [[ $test =~ $reg ]]; then
echo ${BASH_REMATCH[0]};
fi
请参阅IDEONE demo
请参阅this cheatsheet:
正则表达式捕获将在
$BASH_REMATCH
,${BASH_REMATCH[1]}
,${BASH_REMATCH[2]}
等中提供。
这意味着整个匹配值存储在${BASH_REMATCH}
中,索引= 0,后续项目使用(...)
(捕获组)捕获的子匹配。