일부는 비교 프로세스에서 제외 할 파일/디렉토리에 대한 사양으로 ediff-trees.el에서 찾은 다음 regexp에 대해 설명해주십시오.일부는이 설명을 할 수 있습니까? elisp regexp
"\\`\\(\\.?#.*\\|.*,v\\|.*~\\|\\.svn\\|CVS\\|_darcs\\)\\'"
비록이 정규 표현식을 만나는 정규식에 익숙하지만 문자열 기반 변형은 저를 버렸습니다.
일부는 비교 프로세스에서 제외 할 파일/디렉토리에 대한 사양으로 ediff-trees.el에서 찾은 다음 regexp에 대해 설명해주십시오.일부는이 설명을 할 수 있습니까? elisp regexp
"\\`\\(\\.?#.*\\|.*,v\\|.*~\\|\\.svn\\|CVS\\|_darcs\\)\\'"
비록이 정규 표현식을 만나는 정규식에 익숙하지만 문자열 기반 변형은 저를 버렸습니다.
우선, elisp의 정규 표현식을 문자열 이스케이프 처리해야한다는 점을 기억하십시오. 많은 백 슬래시가 만들어졌습니다. 그들을 제거, 우리가, 그리고 \을
\`\(\.?#.*\|.*,v\|.*~\|\.svn\|CVS\|_darcs\)\'
를 얻을 수 (와 \) 그룹화 의미 "foo는 \ | 바", "중 foo는, 또는 바"를 의미한다.
그래서이 정규 표현식은 emacs 임시 파일 (마침표가 #으로 시작하는 것 :.? # # ) 또는 RCS 파일 (끝 : v :.)과 일치합니다. , v) 또는 emacs 백업 파일 (~ :. * ~) 또는 svn 디렉토리 (.svn) 또는 cvs 디렉토리 (CVS) 또는 darcs 디렉토리 (_darcs).
올바른 수정 : andre-r이 올바르게 지적 했으므로, \\과 작은 따옴표는 기본적으로 "문자열의 시작과 끝"을 의미합니다. 그래서 이것은 정규 표현식이 위에서 요약 한 선택 사항 중 하나와 정확히 일치하는 문자열을 찾음을 의미합니다 (즉, 문자열이 시작되고 그 중 하나가 선택되면 문자열이 끝납니다). 나는 이전에 그들이 인용하는 것을 의미한다고 말했다. 나는 내가 생각하는 것을 모른다. :) 고마워 andre-r!
elisp 정규 표현식의 괄호를 이스케이프 처리해야합니다. 문자열에서 백 슬래시를 이스케이프 처리해야하므로 합리적인 정규 표현식 파서가 (
및 )
을 사용하는 경우 \\(
및 \\)
이됩니다. 나를 잘못하지 마라. Emacs를 좋아하지만, 정규 표현식에서 괄호를 벗어나야한다는 것은 정말 나쁜 생각이다. 파이프와 마침표 및 역 따옴표도 이스케이프 처리됩니다. 바로이 때문에 이중 백 슬래시가 발생합니다. 그 밖으로 스트립 그리고 당신은 (정규식 문자 그대로의 형태로) 얻을 :
`(.?#.*|.*,v|.*~|\.svn|CVS|_darcs)'
가 elisp에서 탈출 괄호의 주제에 대한 자세한 설명은 this question를 참조하십시오.
죄송합니다. 이것은 답변이 아닙니다. 이것은 rbp의 대답에 대한 설명 일뿐입니다. 하지만 코드 샘플을 주석 내부에 멋지게 렌더링하는 방법을 알아낼 수는 없지만이 답변에서는 괜찮습니다. 어쨌든
:
내가 당신에 대해 몰라,하지만 난
(rx bos (group (or (and (zero-or-one ".") "#" (zero-or-more nonl))
(and (zero-or-more nonl) ",v")
(and (zero-or-more nonl) "~")
".svn"
"CVS"
"_darcs"
))
eos)
읽기 훨씬 쉽게 찾을 - 그리고 정확히 해당합니다.
\\'및 \ ' "은 빈 문자열과 일치하지만 일치하는 버퍼 또는 문자열의 시작 부분과 끝 부분에서만 일치합니다." –
andre-r : 물론! 고맙습니다, 너무 많이 사용했습니다 : P 나는 그것을 반영하기 위해 나의 대답을 편집하고 있습니다. – rbp