GNU sedバージョン4.2.1を使用していて、他の2つの文字列で区切られた文字列を抽出するために貪欲でないSED正規表現を作成しようとしています。区切り文字列が1文字の場合、これは簡単です。
s:{\([^}]*\)}:\1:g
この例では、文字列は左側が「{」、右側が「}」で区切られています。
区切り文字列が複数の文字である場合、たとえば「{{{」および「}}}」と言います。上記の式を次のように調整できます。
s:{{{\([^}}}]*\)}}}:\1:g
したがって、中央の式は、「}}}」の終了文字列を含まないものと一致します。ただし、これは、一致文字列に「}」がまったく含まれていない場合にのみ機能します。何かのようなもの:
{{{cannot match {this broken} example}}}
動作しませんが
{{{can match this example}}}
動作します。もちろん
s:{{{\(.*\)}}}:\1:g
常に機能しますが、貪欲なので、同じ行に複数のパターンが発生する場合には適していません。
私は、それ以外のことを意味し、[^a]
それ以外a
のことを意味することを理解していますが、それは機能しているように見えますが、3つの連続する文字のシーケンスを除外する正しい方法ではないと思います。[^ab]
a
b
[^}}}]
では、他の2つの文字列で区切られた文字列に一致するSEDの正規表現を作成するにはどうすればよいですか?