2015-02-04 4 views
-1

나는 몇 시간 전에이 질문을했습니다 : Match first word at the beginning of a line (Vim). 왜 다음 정규식 (Vim)을 사용하지 않는 것입니까?

:=( 이전의 행의 시작 부분에 주먹 단어를 일치 시키려면 :
\S\+\ze\s*[:=]\s*(

은 그 때 나는 매우 마술 버전으로 바꿨다 :

\v\S+\ze\s*[:=]\s*\( 

모두 OK. 내가 -> 문자로 ( charactor를 변경하는 경우 arised 문제 :

/\v\S+\ze\s*[:=]\s*\-\> 

그것은 "을 (를) 찾을 수 없습니다 패턴"라고는 아무것도 일치하지 않습니다.

해결 방법?

답변

1

정규식은 ->: 또는 = 다음에 (공백을 모듈로) 따라야 만 일치합니다.

그러나 주어진 original post 주어진 경우 정규식을 구문에 서명이 포함 된 일종의 함수 정의 (예 : 함수 인수 + 구문 설탕 목록)에 적용하고 있습니다. 따라서 정규 표현식과 일치 시키려면 서명 부분을 효과적으로 처리해야합니다. -의 서명 부분 내의 유효한 문자 아니라고 가정하면, 다음과 같은 변형 된 정규식 트릭을 할 것이다

/\v\S+\ze\s*[:=][^\-]+\-\> 

일본어에 차이가 함수 서명 위에 ->가 게재의 (- 스킵 부가 [^\-]+ 일부 여기에 차단제로서).

정규식 문자 클래스의 마지막 항목으로 나열된 경우 -을 이스케이프 할 필요가 없습니다.하지만 ... 어쨌든 수정하거나 복사 할 때 편리하게 수행 할 수있는 [나쁜?] 습관을 개발했습니다. - 정규식을 ...).