Program Tip

Vim 정규식 역 참조

programtip 2020. 12. 12. 12:17
반응형

Vim 정규식 역 참조


나는 이것을하고 싶다 :

%s/shop_(*)/shop_\1 wp_\1/

shop_(*)아무것도 일치 하지 않습니까?


내가 올바르게 이해한다면 당신은 %s/shop_\(.*\)/shop_\1 wp_\1/

캡처하는 괄호를 이스케이프하고 .*모든 문자를 일치 시키는 데 사용 합니다.

(검색에서 "shop_"다음에 여는 괄호와 닫는 괄호를 차례로 검색)


여기에 몇 가지 문제가 있습니다.

  1. vim regexen의 괄호는 캡처 용이 아닙니다 \( \). 캡처 에 사용해야 합니다.

  2. *당신이 생각하는 것을 의미하지 않습니다. 그것은, "더 이전의 0 또는"을 의미하므로 정규 표현식 수단 "이 모두 포함 된 문자열 shop_0+ 다음 (리터럴 다음과 ).
    당신이 찾고있는이 .모든 문자". 스타 등과 함께 넣어, 정규식 수단에있는 " .*"0 개 이상의 문자"를 의미합니다. 최소한 하나의 문자를 원할 수 있으므로 .\+( +"이전 문자 중 1 개 이상"을 의미)를 사용하십시오.

이것을 사용하십시오 : %s/shop_\(.\+\)/shop_\1 wp_\1/.

선택적으로 g마지막 슬래시 뒤로 끝내면 첫 번째 줄이 아닌 한 줄의 모든 인스턴스를 바꿉니다.

참고 URL : https://stackoverflow.com/questions/3339080/vim-regex-backreference

반응형