2011-08-17 4 views
1

vimscript에서 matchstr()matchlist()`preg_quote()`와`quotemeta`와 같은 Vim입니다.

로 물건을 정규 표현할 수 있습니다. 그러나 사용자 제공 문자열을 패턴에 추가해야한다면 어떻게해야합니까?
어떻게 메타 문자를 인용 할 수 있습니까?

답변

2

나는 그런 것이 없다고 생각하지만, 충분할 수도있는 마법 수정자를 사용할 수 있습니다. 의는 다음과 같은 식을 있다고 가정 해 봅시다 : (내가 제대로 이해한다면) 다음 사용자가 제공 한 문자열입니다

let pattern = '\<'.word.'\>' 

word 경우 그 안에 모든 특수 수정을 무시하고 싶습니다. 그렇게하려면 "매우 nomagic 모드"를 사용하십시오. 패턴 앞에 "\ V"를 넣으면 패턴이 문자 그대로의 문자열처럼 작동합니다. 그런 다음 "\ m"을 넣어 정상적인 동작으로 복원하십시오. 이 경우 :

let pattern = '\<\V'.word.'\m\>' 

단, 정확히 당신을 요구하고 있지 이되는 것. 사용자가 foo(*bar)을 입력하면 올바르게 작동하지만 foo(\*bar) 인 경우 \* 쌍이 별표 수정 자로 해석되므로 입력하지 않아도됩니다. 이러한 모드에 대해 잘 모르는 경우 :help /\V을 사용해 마법이 작동하는 방식을 더 잘 이해할 수 있습니다.

+0

Mh, 네, PCRE에서'\ Q'와'\ E'를 생각 나게합니다. 그것은 완벽하지는 않습니다. (내 이해는 사용자가'\ m'을 검색 문자열에 삽입하는 것에 대해 아무것도하지 않습니다.) 그러나 어쩌면 아마도 다음과 같이 완화 될 수 있습니다 : let s : pattern = 대용 물 (s : 패턴, '\\ m', '\\\\ m')'이 승인되었습니다. – ZJR

+1

사실 :'let s : pattern = substitute (s : pattern, '\\', '\\\\', 'g')' – ZJR

관련 문제