2012-05-07 3 views
2

문자열이 일련의 조건으로 구성되어 있는지 확인하고 싶습니다.문자열이 일련의 조건으로 구성되어 있는지 확인하는 방법

p.e.

let myvar = '.....' 
if myvar doesn't contain: 

- 'cos' 
- or 'sin' 
- or 'tan' 
- or 'log' 
- or only contains of this: [0-9*/:-+<space>] 
- or ... etc 

give an error message. 

나는이 목록에있는 모든 조건을 넣어 문자열 다음 조건 중 하나가 있는지 확인하고 싶습니다.
문자열에 이러한 조건이 없으면 오류 메시지를 표시하십시오.

누구든지 올바른 정규식을 찾도록 도와 줄 수 있습니까?

답변

3

은 내가 match() 기능을 사용이 샘플 도움이

function! Test(s) 
    if match(a:s, '\<\(cos\|sin\|tan\|log\)\>') < 0 
     echo "functions not matched" 
    endif 
    if match(a:s, '^[0-9*\\\/:+\- ]*$') >= 0 
     echo "only numerics and operators" 
    endif 
endf 

희망을 건의 할 것입니다.

:call Test('123 * 38 - 04 : 7 + 1269') 
:call Test('biological') 
:call Test('log(x)') 
+0

Sehe 감사합니다. 그게 내 질문을 해결했다. – remio

2

당신은 반대를 확인할 수 있습니다

^.*\(cos\|sin\|tan\|log\|[^0-9*\/:+ -]\) 

일치 0-9보다 용어 cos, sin 등 또는 적어도 하나의 적어도 하나의 문자가 다른 경우, * 등은 문자열에서 찾을 수 있습니다.

따라서 문자열이 문자 0-9*\/:+ -만으로 구성되어 있거나 언급 한 키워드를 포함하지 않은 경우 일치하지 않습니다.

+0

Vim에는 미리보기 주장이 있습니다. 당신은 여기에 그것들이 필요하지 않습니다. – sehe

+0

감사합니다. 나는 아직도 당신이 작성한 코드로 myvar를 검사하는 방법을 이해하지 못한다. myvar를 확인하는 방법을 보여 주실 수 있습니까? 참고 : myvar는 ** ** [0-9 * \/: + -]'문자 만 있거나 myvar에'cos \ | sin \ | tan \ | log'을 포함하면 일치합니다. – remio

+0

@sehe : 고마워, 그거 알아. –

관련 문제