[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
보다:
답변
백 슬래시로 캡처 그룹을 피하고 싶지 않다면 (이것이 놓친 것입니다) \v
Vim의 정규 표현식 엔진을 매우 마술 모드 로 바꾸십시오 .
:%s/\v(\w)(\w\w)/\1y\2/g
답변
이 패턴을 더 짧게 사용할 수도 있습니다.
:%s/^./&y
%s
패턴을 전체 파일에 적용합니다.^.
줄의 첫 문자와 일치합니다.&y
y
패턴 다음을 추가합니다 .
답변
또한 그룹화 마비를 피해야합니다.
:%s/\(\w\)\(\w\w\)/\1y\2/g
그 트릭을 수행합니다.