$BASH_REMATCH
を使えば良い。
string="--ABC--"
regexp="-(A)(B)(C)-"
if [[ $string =~ $regexp ]]
then
echo ${BASH_REMATCH[0]} # => -ABC-
echo ${BASH_REMATCH[1]} # => A
echo ${BASH_REMATCH[2]} # => B
echo ${BASH_REMATCH[3]} # => C
fi
説明
-
$BASH_REMATCH[0]
には、キャプチャとは関係なく、マッチした文字列全体が入る。 -
$BASH_REMATCH[1]
以降には、キャプチャした順番で、マッチした文字列が入る。
ちなみに
正規表現部分を直書きするとダメで、いちど変数に収める必要があるっぽい。
string="--ABC--"
if [[ $string =~ "-(A)(B)(C)-" ]]
then
echo ${BASH_REMATCH[0]}
echo ${BASH_REMATCH[1]}
echo ${BASH_REMATCH[2]}
echo ${BASH_REMATCH[3]}
fi
環境
- bash 3.2
参考
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。