vim에서 어떻게 매치를 욕심없이 만들 수 있습니까?
다음과 같은 마크 업이 많은 큰 HTML 파일이 있습니다.
<p style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
모든 것을 제거하기 위해 Vim 검색 및 교체를 시도 class=""
하고 style=""
있지만 일치하지 않는 일치하는 데 어려움을 겪고 있습니다.
나의 첫번째 시도는 이것이었다
%s/style=".*?"//g
하지만 Vim은을 좋아하지 않는 것 같습니다 ?
. 불행히도를 제거하면 ?
경기가 너무 욕심이됩니다.
내 성냥을 어떻게 불쾌하게 만들 수 있습니까?
대신에 .*
사용 .\{-}
.
%s/style=".\{-}"//g
또한 참조 :help non-greedy
vim에서 욕심없는 검색은 {-} 연산자를 사용하여 수행됩니다. 이처럼 :
%s/style=".\{-}"//g
단지 시도:
:help non-greedy
무슨 일이야
%s/style="[^"]*"//g
PCRE 정규식 구문이 더 편하다면
- OP에서 요청한 것처럼 욕심없는 연산자?를 지원합니다. 과
- backwhacking 그룹화 및 카디널리티 연산자가 필요하지 않습니다 (리터럴 문자와 일치하지 않고 연산자를 지정하기 때문에 완전히 직관적이지 않은 vim 구문 요구 사항). 과
펄 기능으로 컴파일 된 [g] vim이 있습니다.
: 기능을 검사하고 검사합니다. + perl이 있다면 잘 가야합니다)
를 사용하여 검색 / 바꾸기
:perldo s///
예. img 태그에서 src 및 alt 속성을 교체하십시오.
<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p>
:perldo s/(src=".*?")\s+(alt=".*?")/$2 $1/
<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
이 유형의 질문에 대한 좋은 해결책은 다음과 같습니다.
: %! sed ...
(또는 원하는 경우 perl). IOW는 vim의 정규 표현식을 배우기보다는 이미 알고있는 도구를 사용합니다. 펄을 사용하면? 수정자는 일치하지 않는 작업을합니다.
와 함께 \v
(여러 의견에서 제안한 바와 같이)
:%s/\v(style|class)\=".{-}"//g
플러그인 eregex.vim 은 Perl 스타일의 욕심없는 연산자 *?
와+?
G'day,
Vim의 정규 표현식 처리는 그리 훌륭하지 않습니다. sed의 정규 표현식 구문이 vim의 기능과 올바르게 일치한다는 것을 알았습니다.
나는 일반적으로 검색 강조 표시 (: set hlsearch)를 설정 한 다음 슬래시를 입력 한 후 정규식으로 검색 모드로 들어갑니다.
편집 : Mark, 욕심 매칭을 최소화하기위한 트릭은 Dale Dougherty의 훌륭한 책 "Sed & Awk"( 위생 아마존 링크 ) 에서 다룹니다 .
3 장 "정규 표현식 구문 이해"는 sed 및 awk와 관련된보다 기본적인 정규 표현식 기능에 대한 훌륭한 소개입니다. 짧고 읽기만 권장합니다.
HTH
건배,
참고 URL : https://stackoverflow.com/questions/1305853/how-can-i-make-my-match-non-greedy-in-vim
'Programing' 카테고리의 다른 글
가변 구조체는 왜 "악"입니까? (0) | 2020.02.15 |
---|---|
typeof! ==“undefined”vs.! = null (0) | 2020.02.15 |
mysql2 설치 오류 : gem 기본 확장을 빌드하지 못했습니다 (0) | 2020.02.15 |
Swift 4 모드에서 Swift 3 @objc 유추는 사용되지 않습니다. (0) | 2020.02.15 |
버튼과 링크에서 Firefox의 점선을 제거하는 방법은 무엇입니까? (0) | 2020.02.15 |