Bash で正規表現を使用してスペースを一致させるにはどうすればいいですか? 質問する

Bash で正規表現を使用してスペースを一致させるにはどうすればいいですか? 質問する

以下のコードは「yes」をエコーするはずですが、そうではありません。何らかの理由で、一重引用符と一致しません。なぜでしょうか?

str="{templateUrl: '}"
regexp="templateUrl:[\s]*'"

if [[ $str =~ $regexp ]]; then
  echo "yes"
else
  echo "no"
fi

ベストアンサー1

交換する:

regexp="templateUrl:[\s]*'"

と:

regexp="templateUrl:[[:space:]]*'"

によればman bash=~演算子は で定義されている「拡張正規表現」をサポートしますman 3 regexman 3 regexは、POSIX 標準をサポートし、 を参照することを述べていますman 7 regex。POSIX 標準では、[:space:]空白の文字クラスとして がサポートされています。

GNUbashマニュアルサポートされている文字クラスを次のように文書化します。

'[' と ']' 内では、構文 [: を使用して文字クラスを指定できます。クラス:]、 どこクラスPOSIX 標準で定義されている次のクラスのいずれかです。

alnum アルファ ascii 空白 cntrl 数字 グラフ 下 印刷
句読点 スペース 上 単語 xdigit

\sGNU ドキュメントで私が見つけた に関する唯一の言及は、正規表現ではなく、bashなどのプロンプトでの無関係な使用に関するものでした。PS1

の意味*

[[:space:]]一致するちょうど1つ空白文字。[[:space:]]*一致する0以上空白文字。

spaceとの違いblank

POSIX正規表現2 種類の空白文字クラスを提供します:[[:space:]]および[[:blank:]]:

  • [[:blank:]]はスペースとタブを意味します。これは次のようになります: [ \t]

  • [[:space:]]には、スペースとタブに加えて、改行、ラインフィード、フォームフィード、垂直タブが含まれます。これは、 と似ています: [ \t\n\r\f\v]

文字クラスを使用する主な利点は、Unicode フォントに対して安全であることです。

おすすめ記事