[regex] Vim Regex 캡처 그룹 [bau-> byau : ceu-> cyeu]

단어 목록이 있습니다.

bau
ceu
diu
fou
gau

그 목록을 다음과 같이 바꾸고 싶습니다.

byau
cyeu
dyiu
fyou
gyau

명령을 성공적으로 시도하지 못했습니다.

:%s/(\w)(\w\w)/\1y\2/g

이것이 작동하지 않는 경우 정규 표현식 캡처 그룹을 Vim에서 작동하게하려면 무엇을 변경해야합니까?



답변

이 문제를 해결하는 한 가지 방법은 이스케이프 된 괄호로 패턴을 묶는 것입니다.

:%s/\(\w\)\(\w\w\)/\1y\2/g

약간 짧은 (더 마법 -al)을 사용하는 것입니다 \v패턴의 모든 ASCII 문자 제외 후 즉, '0'-'9', 'a'-'z', 'A'-'Z''_'특별한 의미를 가지고 :

:%s/\v(\w)(\w\w)/\1y\2/g

보다:


답변

백 슬래시로 캡처 그룹을 피하고 싶지 않다면 (이것이 놓친 것입니다) \vVim의 정규 표현식 엔진을 매우 마술 모드 로 바꾸십시오 .

:%s/\v(\w)(\w\w)/\1y\2/g


답변

이 패턴을 더 짧게 사용할 수도 있습니다.

:%s/^./&y
  • %s 패턴을 전체 파일에 적용합니다.
  • ^. 줄의 첫 문자와 일치합니다.
  • &yy패턴 다음을 추가합니다 .

답변

또한 그룹화 마비를 피해야합니다.

:%s/\(\w\)\(\w\w\)/\1y\2/g

그 트릭을 수행합니다.


답변