2011-09-27 8 views
3

문자열의 시작과 끝을 나타내는 문자 인에 줄 바꿈이 무엇입니까? 나는 트림 기능을 쓰고 있어요 : Emacs regexps의 문자열의 시작과 끝

(defun trim (str) 
    (if (string-match "^[[:space:]]*\\(.+?\\)[[:space:]]*$" str) 
     (match-string 1 str) 
     str)) 

그러나 그것은 단지 "첫 번째"반환 (shell-command-to-string에서 가져온) "첫번째/nnext"와 같은 문자열

. 참조 설명서의 내용 :

버퍼 대신 문자열을 일치 시키면 '^'은 문자열의 시작 부분 또는 개행 문자 뒤에 일치합니다.

\\' 왼쪽은 버퍼의 시작/끝 부분이므로 문자열에서 아무것도 반환하지 않습니다. 따라서 가능한 경우 문자열의 '절대'시작을 나타내는 방법은 무엇입니까?

답변

4

버퍼 또는 문자열의 시작 부분은 \\`입니다. 끝으로 \\'입니다. manual

그러나 나는 당신의 뼈의 근원이 앵커가 아니라고 생각합니다. [:space:] char 클래스는 현재 구문 테이블을 기반으로 다른 문자를 찾습니다. 비 인쇄 또는 인쇄 문자와 정확하게 일치 시키려면 [:graph:]을 사용하십시오. char class

또한 .은 개행과 일치하지 않습니다.

예.

(let ((str " \n a\nbc \n ")) 
    (string-match "\\`[^[:graph:]]*\\(\\(?:.\\|\n\\)+?\\)[^[:graph:]]*\\'" str) 
    (match-string 1 str)) 
+0

고마워. 그러나 \\ '[[: space :]] * \\ (. +? \\) [[: space :]] * \\''(시작 부분에 \\' ") 시작과 끝에서'\ n'을 자르지 않습니다. –

+0

문제는 앵커가 아닙니다, 그것은 당신의 정규 표현식입니다. [: space :]는 개행과 일치하지 않습니다. 내 대답을 수정하겠습니다. –

+0

" '[: space :]'이것은 공백 구문을 가진 모든 문자와 일치합니다 (구문 클래스 테이블 참조). (http://www.gnu.org/software/emacs/elisp/html_node/Char-Classes.html). "구문 클래스 : 공백 문자 ... 공백, 탭, 개행 및 formfeed는 거의 모든 주요 모드에서 공백으로 분류됩니다." (http://www.gnu.org/software/emacs/manual/html_mono/elisp.html#Syntax-Class-Table). 당신의 대답이이 상황에서 도움이되기를 바랍니다. –

관련 문제