間隔正規表現とトークン正規表現とは何ですか?

間隔正規表現とトークン正規表現とは何ですか?

私は最近sedについて読んでこのトピックを見つけました。このトピックをよりよく理解するには、いくつかの例が必要です。

ベストアンサー1

正規表現の間隔演算子基本正規表現標準サポート(BRE)sed\{x,y\}

同等の ERE (拡張) または PCRE (perl互換) 演算子 (一部の実装で使用される-r/-E, -R/ ) は です。-Psed{x,y}

正規表現の反復回数の範囲を指定するために使用されます。

sed 's/<a\{3,12\}>/<b>/'

最初の項目を置き換えて<から3〜12a秒、>それからを交換します<b>

同様の入力で<a> <aa> <aaaa> <aaaaaaaa>置き換えられます。<aaaa><b>

タグ正規表現より一般的に知られているキャプチャグループ

\(...\)BREはERE / PCREと同じです(...)捕獲次のように使用できる正規表現に一致するテキスト逆参照または代替。これらの製品は、次の用途にも使用できます。グループ\(foo\)*任意の数のfoosと同様)。

存在する:

sed 's/\(.\)\(.\)\(.*\)\2\1/\1\2<\3>\2\1/'

私たちには3つあります。タグ式また〜として知られていますキャプチャグループ、最初に一致する文字(.単一文字と一致するために使用されます)は、で表さ\(.\)れ、後で正規表現で参照され1(したがって、最初の文字がキャプチャされた場合はonのみ一致)、置換にも使用されます。\1\(.\)x\1x

このように入力するとwhatever -+foobar+-正規表現が見つかり、コマンド(1:-)(2:+)(3:foobar)(2:+)(1:-)sそれを置き換えます-+<foobar>+-

標準(POSIX)EREは逆参照(\1上記の正規表現で)をサポートしていないため、(...)以下でのみ機能します。グループ(foo|bar)または のように(foo){1,3})、一部の実装ではこれを拡張としてサポートします。 POSIX 仕様の次のメジャーバージョンでは、正規表現-Eに ERE を使用するオプションを指定します。正規表現(逆参照)ではまだサポートされていませんが、そのタグ式と一致するように代替項目が拡張される予定です。sed\1\1s

python、、perlPCRE、または互換性のある正規表現を使用すると、マーカー式に任意の名前を付けることができます(左から右に番号が付けられた1、...だけでなく)。2詳細については、該当するマニュアルを参照してください。

おすすめ記事