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


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.