我在这里有一个文本,该文本已在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,$
写得很好 %
\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] 删除。
我来说两句