Edited at

Bash | 正規表現でマッチした文字列をキャプチャして使う

More than 1 year has passed since last update.

$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


参考