2016-06-02 9 views
0

내가 인스턴스로, 특정 폴더 전에 나에게 경로의 인덱스를 제공하는 정규식을 작성하는 것을 시도하고있다 : 그래서로부터의 경로를 추출 할 수 있습니다이맥스 정규식 추출물 경로

"/1/2/projects/myproject/application_self_service/development_settings.py" 

인덱스 5를 반환해야 문자열을 사용하여 사실 (문자열 0 5 문자열)

내가 여기에 내 머리를 두드리는하고, 모든 시간 전무

(string-match-p (regexp-quote ".*\\project") "/1/2/projects/myproject/application_self_service/development_settings.py") 

돌아 .... 뭐가 잘못입니까?

+0

이 경우 'regexp-quote'를 꼭 사용해야합니까? 또한 "프로젝트"라는 단어 앞에 두 개의 백 슬래시를 사용하는 이유는 무엇입니까? – lawlist

+0

나는 백 슬래시 (backslash)를 벗어날 것이다. 나는 진짜 ELisp 전문가가 아니기 때문에 대체 솔루션으로 자유롭게 답할 수있다. – pedr0

+0

문자열 "/1/2/projects/myproject/application_self_service/development_settings.py"에 백 슬래시가 표시되지 않았다. "그래서 내가 의도 한 용도에 대해 물었습니다. 백 슬래시를 포함 할 이유가 없으면 제거하십시오. 마찬가지로이 경우'regexp-quote'를 포함 할 이유가 없다면 그것을 제거하십시오. '* scratch *'버퍼에 일치시킬 테스트 문자열을 놓고'M-x re-builder '라고 입력하십시오. '* RE-Builder *'버퍼에 더블 쿼트 (이미 거기에 있어야 함) 사이에'. * project'을 입력 한 다음 조금만 가지고 놀고 필요에 따라 regexp를 조정하십시오. – lawlist

답변

1

내가 원하는 regexp는 "/projects"이라고 생각합니다. 경로에 당신은,

(string-match-p 
"/projects" 
"/1/2/projects/myproject/application_self_service/development_settings.py") 

반환 4,

(substring "/1/2/projects/myproject/application_self_service/development_settings.py" 0 4) 

반환 "/1/2"을 제공했다. (여담으로, 당신이 잘못된 순서로 substring에 인수를 가지고 있습니다.)


마지막으로, 원래의 접근 방식이 작동하지 않은 이유에 대한 몇 가지 의견 :

  1. 우선 off이면 regexp-quote은 문자열을 취하고 그 문자열에만 일치하는 정규 표현식을 생성합니다 (설명서마다 C-h f regexp-quote). 이 경우 문자열에 ".*\projects" (마침표 및 별표 포함)이 리터럴 하위 문자열로 포함되어 있으면 string-match-p 호출은 nil이 아닌 값만 반환합니다.

  2. 두 번째로, 경로가 앞으로 슬래시를 구분 기호로 사용하고 백 슬래시는 사용하지 않았다는 것을 알았습니다.

  3. 마지막으로, 당신은 경기의 시작은 항상의 시작이 될 것이기 때문에도 경기의 경우에, string-match-p 그냥 0을 반환 때문에 정규 표현식에서 최고의 ".*"을 포함하지 않을 끈.