0

次のテキストを含む文字列があります。

...,"names":"exampleName",...

正規表現パターンが文字列と一致するかどうかを確認する次の if ステートメントがあります。

if [[ $string =~ names\":\"(\w+)\" ]]; then
      echo "Matches"
fi

問題は、echo ステートメントが実行されないことです。これは、本質的に、正規表現が一致しなかったことを意味します。

ここで私が間違っていることはありますか?似合うはずだから…

乾杯。

4

3 に答える 3

1

ここでの問題は、サポートされていない文字クラス識別子を使用していることのようです。以下の参考文献1にあるように、bashは、viやその他の場所で使用されているスラッシュエスケープ文字クラスではなく、POSIX文字クラスを使用しているようです。

使用するのではなく、(英数字とアンダースコア)を使用\wする必要があります。[[:alnum:]_]私は使用すると言い[[:word:]]ますが、bashのすべてのバージョンがそれをサポートしているわけではないようです(私の場合はサポートしていません)。

適切に変更されたコードのバージョンは次のようになります。

string='...,"names":"exampleName",...'

if [[ $string =~ names\":\"([[:alnum:]_]+)\" ]]; then
  echo "Matches"
fi

参照:

  1. http://www.gnu.org/software/bash/manual/html_node/Pattern-Matching.html
  2. http://www.regular-expressions.info/posixbrackets.html
于 2013-03-03T23:54:44.453 に答える
1

これは見積もりの​​問題です。たとえば、これを参照してください

試す:

$ string='...,"names":"exampleName",...'

$ re='names":"(\w+)"'

$ if [[ $string =~ $re ]]; then echo match; fi
match
于 2013-03-03T22:18:16.423 に答える
0

試す:

if [[ $string =~ names\":\"[[:alnum:]_]+\" ]]; then 
于 2013-03-03T23:22:43.257 に答える