我是正確理解的幫助下,該定義(VIM)的正則表達式:掩蓋文字與圖案
:range s[ubstitute]/pattern/string/cgiI
表明,該字符串的一部分確實只是字符串進行使用,即模式不允許?我想這樣做是在與X * N個符號位置M做更換說任何N個符號構成,所以我也希望用這樣的:
:%s/^\(.\{10}\).\{28}/\1X\{28}/g
不工作,因爲\{28}
字面解釋。
正在編寫28 XXXXX ... X在替換部分唯一的可能性?
我是正確理解的幫助下,該定義(VIM)的正則表達式:掩蓋文字與圖案
:range s[ubstitute]/pattern/string/cgiI
表明,該字符串的一部分確實只是字符串進行使用,即模式不允許?我想這樣做是在與X * N個符號位置M做更換說任何N個符號構成,所以我也希望用這樣的:
:%s/^\(.\{10}\).\{28}/\1X\{28}/g
不工作,因爲\{28}
字面解釋。
正在編寫28 XXXXX ... X在替換部分唯一的可能性?
您可以通過\=
在替換零件中使用表達式。你必須通過submatch()
訪問比賽,並與靜態字符串,您可以通過repeat()
生成一起加入吧:
:%s/^\(.\{10}\).\{28}/\=submatch(1) . repeat('X',28)/g
在替換部分中允許的唯一正則表達式構造是編號組:\1 \2 \3
等。重複構造{28}
在那裏是無效的,雖然這是一個聰明的想法。你將不得不使用28個X's。
當然,你總是可以濫用Vim的緩衝區來避免手動輸入28個X(即在插入模式下輸入命令,用'28aX'完成,將其粘貼在緩衝區中,然後將緩衝區的內容加載到Ex模式中)。 –
另一種替代方法是在更換部分地使用表達式:與submatch(1)
獲得
:%s/^\(.\{10}\).\{28}/\=submatch(1).repeat("X",28)/g
第一匹配組。欲瞭解更多信息,請參閱:h sub-replace-expression
。
在Perl中你可以使用'S /正則表達式/「X」×28/ge'。 – Qtax