Gruppe 3 ist als 2-stellig definiert. Wenn Sie die letzten 4 Ziffern, die Sie wollen, mit \(\d\d\d\d\)
ohne *
am Ende abgleichen möchten. Wenn du nur alle Ziffern außer den ersten 4 abgleichen möchtest, setze dein *
in die Gruppenübereinstimmung und nicht nach außen.
Wie beschrieben, erfasst Ihr Regex eine Ziffer, dann drei Ziffern und dann eine beliebige Anzahl von Gruppen mit jeweils zwei Ziffern. Die dritte Übereinstimmung wird daher immer zweistellig sein, wenn sie existiert. In Ihrem speziellen Testfall ist die '89' in \ 4, nicht \ 3.
Ändern der Regex zu
%Vor%gibt Ihnen '6789' als Ergebnis, da es zwei oder mehr Ziffern (bis zu so vielen wie dort) in der dritten Gruppe erfasst.
Ich habe dieses in nvi versucht und es funktioniert nicht. In vim funktioniert es nur, dass Sie den letzten umgekehrten Strich vor dem g korrigieren müssen, für einen Strich, wie folgt:
1,$s/\(\d\)\(\d\d\d\)\(\d\d\)*\>//g
und es wird durch 89 ersetzt. Der Grund ist, dass Sie mit dem * sagen, dass das letzte \ d \ d null, einmal oder mehrmals wiederholt werden kann, und mit & gt; Sie sagen Endwortgrenze. Mit der Gruppe 3 sagst du, dass du die Las-Gruppe willst, aber wegen der * beiden Ziffern (\ d \ d) sind es 89. Das * & gt; Sie können 6789 bekommen. So:
1,$s/\(\d\)\(\d\d\d\)\(\d\d\)//g
Achten Sie auf die & gt; wer spielt da eine heikle Rolle weil:: 1,$s/\(\d\)\(\d\d\d\)\(\d\d\)\>/
Du bekommst 2389 LOL! Weil vom Ende der Wortgrenzenperspektive dddddd mit 456789 übereinstimmt und es durch die letzten zwei dd ersetzt wird, und das ist 89. Sie erhalten also 23 + 89
Unglaublich! LOL