🖥

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

2023/08/26に公開

$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オープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2016-07-14

Discussion