2

Vi で次のように暗号化されたテキストがあります。

1,$s/\(.\)\1/&&/g
1,$s/\(.\)\(.\)\2\2\2/\2\2\2\1\2/g
1,$s/\(.\)\(.\)\(.\)\(.\)/\3\1\4\2/g
1,$s/\(...\)\(...\)/\2\1/g

タスクは、変更を元に戻すために、正規表現ごとに新しい正規表現を作成することです。いわゆるテキストの復号化です。

最後の2つの変更を元に戻す方法を見つけました:

:1,$s/\(...\)\(...\)/\2\1/g
:1,$s/\(.\)\(.\)\(.\)\(.\)/\2\4\1\3/g

最初の 2 つの正規表現が何をするのか説明してほしい。スラッシュの前の \1 または \2\2\2 は何を意味しますか? スラッシュの後に場所が変わると思います (しかし、\2\2\2\1\2 の代わりに \2\1 と書くだけで十分ではありませんか (どういう意味ですか?)?それ)。& または && とはどういう意味ですか?

ありがとうございました

4

2 に答える 2

1

次の復号化シーケンスを試してください

%s/\v(...)(...)/\2\1/g
%s/\v(.)(.)(.)(.)/\2\4\1\3/g
%s/\v(.)\1{2}(.)\1/\2\1\1\1\1/g
%s/\v(.)\1{3}/\1\1/g

ノート :

  1. 1,$としてよく書かれています%
  2. 非常に魔法の指定子\vを使用して、大量のエスケープを回避します\

スラッシュの前の \1 または \2\2\2 は何を意味しますか?

以降\1,\2,..、 内で一致したものをキャプチャします()。したがって、それらがパターン自体のマッチングで使用される場合、それらは繰り返し文字と一致することを意図しています。

  • (.) は任意の文字に一致しますが、文字(.)\1の後にそれ自体が続く文字、つまり文字が 2 回繰り返された文字のみに一致します。たとえば、 stringabbxyzでは、一致しますbb

  • (.)(.)\2\2\24 回繰り返される別の文字が続く文字のみに一致します。と書いた方が良いです(.)(.)\2{3}。たとえば、 stringbaabbbbaaでは、一致しますabbbb


& または && とはどういう意味ですか?

&完全に一致する文字列が含まれます。明らか&&に、一致した文字列の 2 回の繰り返しです。

たとえば、入力文字列abbxyzと一致するパターンは(.)\1、 にbb格納されているものと一致し&ます。したがって、の値&&bbbb


PSThe Premier website about Regular Expressionsこのような問題に飛び込む前に、一度確認することを強くお勧めします。

于 2013-11-03T11:44:55.990 に答える
0

\1最初のキャプチャ サブパターンを参照し\2、2 番目など&は検索パターンに一致するテキストであるため、検索対象のすべてに一致するテキストです (その特定の一致については、バッファに複数の一致がある可能性があります)。 .

最初のパターンは、繰り返される任意の 2 文字に一致します。たとえば、次のabbように置き換えられます。abbbb

2 番目のパターンは、別の文字が 4 回繰り返される文字 (合計 4 回連続する文字) に一致し、それを 2 番目の文字で 3 回、次に最初の文字、2 番目の文字で置き換えます。たとえば、次のabbbbように置き換えられますbbbab

于 2013-11-03T03:45:17.210 に答える