やりたかったこと
"hoge"という文字列を含んで、"fuga"という文字列を含まないものを正規表現でマッチさせたかった。
ハマった点
以下で実行してみると「NG」となり、ハマって同僚に相談。
NAME="hoge"
if [[ ${NAME} =~ ^(?!.*fuga).*(?=hoge).* ]]; then
echo "OK"
else
echo "NG"
fi
どうやらbashの正規表現がEREなのでこれではうまくマッチしなかったのが原因。
対処
NAME="hoge"
MATCH_PATTERN="^.*hoge.*$"
MISMATCH_PATTERN="^.*fuga.*$"
if [[ ${NAME} =~ ${MATCH_PATTERN} && ! ${NAME} =~ ${MISMATCH_PATTERN} ]];then
echo "OK"
else
echo "NG"
fi
普通に一つずつ判断してAかつBって感じで判断してもらうようにしました。