2017-10-23 8 views
0

I have read up on other questions/answers that get the text between square brackets - ただし、それらの角かっこを特定のテキストでのみ取得したい場合はどうすればよいでしょうか。角かっこで囲まれた特定のテキストを抽出する正規表現

例えば、私が持っている文字列の形式は次のとおりです。

{this is a}{string with text}{i want this bracket}{only} 

は私だけwantbracket時に検索することにより、{i want this bracket}の全てを抽出したいです。 ithisはランダムなテキスト、たとえば{gjddnsgwantjgnsagjbracket}

可能性があり、私は次の操作を実行して、グループにそれらを分割することができます

/\{(.*?)\}/g

しかし、キャプチャグループはに言っ以内に私は私の愛を検索することはできません私が望むブラケットを抽出します。

+1

[この](https://regex101.com/r/XJ0Rkh/1)のようなもの? – Gurman

+0

@Gurman、それは私が必要とするものです - 答えを入れてください!ありがとう! –

+0

@JonathanDavis答えとして掲示される。 – Gurman

答えて

1

この正規表現を試してみてください:

{(?=[^}]*want)(?=[^}]*bracket)[^}]+}

Click for Demo

説明:

  • { - マッチ{文字通り
  • (?=[^}]*want) - }
  • (?=[^}]*bracket)wantの存在を検証するために肯定先読み - }
  • [^}]+wantの存在を検証するために肯定先読み - マッチ1+オカレンス}
  • } - }と完全に一致します。
1

これは動作するはずです...

$ echo '{i want this bracket}' | grep -E '{[^}]*want[^}]*bracket[^}]*}' 
{i want this bracket} 

$ echo '{gjddnsgwantjgnsagjbracket[^}]*}' | grep -E '{[^}]*want[^}]*bracket[^}]*}' 
{gjddnsgwantjgnsagjbracket} 
+0

すぐにお返事ありがとうございます。@Bill。 '望み 'が別の括弧に入っているだけでなく、'括弧 'で独自のものであれば、これはどのように対処しますか?それは2つの括弧を返しますか?もしそうなら、 'want and bracket'が入ったブラケットだけを返すようにする方法がありますか?私はこれが理にかなってほしい。 –

+0

両方の単語がない単語は一致しません。例えば'$ echo '{gjddnsgwantjgnsagjb}' | grep -E '{[^}] * want [^}] * bracket}' 'は一致しません。 – Bill

関連する問題