앞뒤로 정규 표현식을 지원합니까?


12

정규식 쿼리 바꾸기를 수행해야합니다.

foo의는 foo bar일치하지만, foo에가 foo baz없습니다. 일반적으로 정규 표현식을 미리 사용 foo(?=bar)합니다.

그러나 Emacs가 이것을 할 수없는 것처럼 보입니까? Vim은 가능해 보이지만 spacemacs의 사악한 모드는 불가능합니다.


:이이이기도 github.com/gamesun/emacs-regex-lookaround은 ,하지만 난이 패치가있는 건물 시도하지 않았고, 그것은 오랜만 것 같습니다.
wvxvw

답변:


10

Emacs 정규 표현식은 임의의 0 너비 미리보기 / 뒤에있는 어설 션을 지원하지 않습니다.

nb Emacs Lisp 언어 구현에 대한 질문에 대해서는 Evil 및 Spacemacs (모든 elisp 라이브러리와 마찬가지로)는 관련이 없습니다.


교체 foo가 불가능 foobar하지만 교체 가 불가능 foobaz합니까? 이것은 해결책이 있어야한다고 생각한 일반적인 작업입니다. 아마도 앞뒤로 보는 것이 잘못된 접근법입니까?
Heisenberg

이것은 엄격하게 동일하지 않습니다,하지만 교체 foo\(bar\)로하는 baz\1모든 경우에 충분합니다 bar더 일치하지를 포함 않았다.
phils

elisp를 작성하는 경우 많은 유연성이 있으며 대화식으로 교체하는 경우 교체하는 동안 임의의 elisp를 호출 할 수 있으므로 궁극적으로 이러한 작업을 수행 할 수있는 방법이 있습니다. 이러한 주장으로 할 수있는 것만 큼 편리하지는 않습니다.
phils

예 : 교체 foo와 함께하는 \,(if (looking-at "bar") "baz" \&)대체합니다 foo함께 baz다음과 같은 텍스트 인 경우 bar(그리고 교체 foo와 함께 foo기타). 여전히 뒤에 오는 경우 에만 일치하는 것과 똑같은 것은 아니지만 또 다른 옵션입니다. foobar
phils

CSM- % foo \ (bar \) RET FOO \ 1 RET를 모든 foo bar를 FOO bar로 바꾸려면 모든 foo baz를 그대로 두십시오. 이것은 당신이 원하는 것을 놓치고 있습니까?
John Kitchin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.