[regex] vim에서 어떻게 매치를 욕심없이 만들 수 있습니까?
다음과 같은 마크 업이 많은 큰 HTML 파일이 있습니다.
<p class="MsoNormal" 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