2011-05-09 3 views
10

M-x replace-regexp를 사용하여 emacs (foo라고 함)에서 모든 단어 전체를 대체하려고합니다.Emacs regex word boundary (구체적으로 밑줄에 관한 것)

문제는 내가 같은 word_foo_word로 밑줄 즉 foo는의 발생을 대체하지 않는다는 것입니다

그때는 밑줄 문자열을 일치 foo에 일치하는 \ bfoo의 \의 B를 사용하는 경우; 필자는 이맥스가 밑줄을 perl과 같은 다른 정규식 시스템과는 다른 단어 경계의 일부로 간주하기 때문에 이해합니다.

앞으로 나아갈 수있는 올바른 방법은 무엇입니까?

감사

답변

5

당신이 쓴 : 내가 이맥스 다른 정규식 시스템

같은 밑줄의 치료에 다른 단어 경계의 부분으로 밑줄을 고려 이해

이맥스의 다른 모든 것들은 설정 가능하다. 이 질문 :
How to make forward-word, backward-word, treat underscore as part of a word?

...가 문의합니다.

구문 테이블의 밑줄 구문을 변경하여 단어의 일부가 아닌 검색/바꾸기로 문제를 해결할 수 있다고 생각합니다.

이렇게하려면 사용중인 모드와 해당 모드에 대한 구문 표의 이름을 알아야합니다. C++에서는 다음과 같이 될 것이다 :

(modify-syntax-entry ?_ "." c++-mode-syntax-table) 

도트는 단어의 없는 부분을 의미한다 "문장"을 의미한다. 이에 대한 자세한 내용은 M-x describe-functionmodify-syntax-entry으로 시도하십시오.

+0

구문 표를 감사합니다. – nsimplex

9

정규 표현식 \<foo\> 또는 \bfoo\b 경기 (foo1에서이 foo_bar에 일치하도록, 일반적으로 영숫자 syntax codew 아니지만)는 단어 구성 문자로 시작하거나 따르지 않을 유일의 foo.

이맥스 22 이후로, 정규 표현식 \_<foo_bar\_>은 심볼 구성 문자 앞에 또는 그 뒤에 기호가없는 경우에만 foo_bar과 일치합니다. 기호 구성 요소는 단어 구성 요소이거나 구문이 _ 인 문자입니다. 대부분의 프로그래밍 모드는 기호 구성 요소로 _을 정의합니다.

+0

감사합니다 \ _ <연산자가 내가 찾고있는 것입니다. – nsimplex