2012-08-15 4 views
30

정규식으로 메모장 ++ 검색/바꾸기를 사용하여 특정 단어를 그 단어의 더 짧은 버전으로 바꾸려고했습니다.

: 역 참조를 사용하여, 같은 단어를 뺀 종료 r와 일치하는 단어를 대체 -

나는 (단어로하지만 er) er로 끝나는 모든 단어를 일치하도록 다음과 같은 정규식을 사용

Find what:([a-zA-z]+e)r

Replace with:$1

그러나 일치하는 단어를 발견하더라도이를 대체하지는 않습니다. 나는이에 역 참조 구문을 변경하는 경우

그러나 :

Replace with:\1

모든 것이 잘 작동합니다.


왜 역 참조가 작동하지 않습니까?

두 가지 형태의 역방향 - \1$1의 차이점은 무엇입니까?

답변

32

Notepad ++ 이전 버전 (v5.9.8 이전)은 표준 POSIX 정규식 만 지원합니다. 그러나 전체 PCRE (펄 호환 정규 표현식) 검색/지원을 교체하는 버전 6.0에 추가되었습니다

New features and enhancement in Notepad++ 6.0:

  • PCRE (펄 호환 정규 표현식)가 지원됩니다.

이하면 (예 : v6.1.5) 메모장 ++ 6.0 또는 최신 버전을 사용하는 경우, 당신은 PCRE 구문을 사용하고, 역 참조에 대한 $1 대신 \1를 사용할 수 있다는 것을 의미하지만 원 이전 버전의 Notepad ++ (버전 6.0 이전)와 호환되지 않습니다. 그것 외에, 그들은 유사합니다.

역 참조 구문과 새로운 구문 지원의 이유에 대한 자세한 내용은 Backreferences syntax in replacement strings (why dollar sign?)을 참조하십시오.

메모장 + +에서 정규 표현식을 사용하는 방법에 대한 유용한 자습서는 here입니다.

+3

@amiregelz 저는 수년 동안 Notepad ++를 사용해 왔지만 가장 큰 좌절감 중 하나는 가난한 Regex 지원이었습니다.나는 2 년 동안 이러한 향상에 어둠 속에서 있었다는 것을 믿을 수 없다. 표준 역 참조, 제로 너비 어설 션 - 아름답습니다! 내 눈을 열어 주셔서 감사합니다! –