1

bashスクリプトでは、次のようになります。

mkv="xxxx E05 xxxx"

if [[ $mkv =~ E[0-9]{2} ]] ; then echo FOUND; fi

良い。これは、$mkvがE[0-9] {2}と一致するかどうかを教えてくれますが、これは私が望んでいることではありません。

一致する文字列(つまり、私の例では05)を取得したい

後で取得できることを期待して、正規表現に参照()を入れましたが、できませんでした。

私は試した :

if [[ $mkv =~ E([0-9]{2}) ]] ; then echo FOUND $1; fi

if [[ $mkv =~ E([0-9]{2}) ]] ; then echo FOUND \1; fi

など...しかし、それらのすべてが失敗しました

ありがとう !

4

1 に答える 1

2

配列を使用してBASH_REMATCH、一致した部分を取得できます。

if [[ $mkv =~ E([0-9]{2}) ]] ; then echo FOUND ${BASH_REMATCH[1]} ; fi

${BASH_REMATCH[0]}全体/完全一致 ( Exx)、${BASH_REMATCH[1]}最初にキャプチャされたグループ (ここでは数字のみ) が含まれます。

于 2013-01-01T11:51:18.437 に答える