Vim:如何使用新的正则表达式撤消正则表达式?

itVico

我在这里有一个文本,该文本已在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

任务是为每个正则表达式编写一个新的正则表达式,以撤消所做的更改,即所谓的文本解密。

我想出了如何撤消最近的两个更改:

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

我想请您解释一下前两个正则表达式的作用。\ 1或\ 2 \ 2 \ 2在正斜杠之前是什么意思?我以为在斜线之后它们会改变位置(但是仅仅写\ 2 \ 1而不是\ 2 \ 2 \ 2 \ 1 \ 2(这是什么意思?)还不够吗?它)。&&或&&是什么意思?

谢谢

杰克沙

尝试遵循解密顺序

%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次。例如在字符串中abbxyz,它将匹配bb

  • (.)(.)\2\2\2将仅匹配一个字符,然后匹配另一个重复4次的字符。最好写成(.)(.)\2{3}例如在字符串中baabbbbaa,它将匹配abbbb


&&或&&是什么意思?

&包含完整匹配的字符串。所以&&显然是匹配字符串的2次重复。

例如输入字符串abbxyz和匹配模式(.)\1匹配bb并存储在中&因此,值&&将是bbbb


附言:我强烈建议您The Premier website about Regular Expressions先解决此类问题。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章