在bash中返回RegEx匹配

时间:2016-07-15 11:51:18

标签: regex bash

使用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"

1 个答案:

答案 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,后续项目使用(...)(捕获组)捕获的子匹配。