2012-05-07 16 views
2

のセットで構成されていないない場合、私はチェックするにはどうすればよい私はチェックしたいと思います文字列は/条件

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. 

私は、リスト内のすべての条件を入れて、文字列 がこれらの条件のいずれかを持っているかどうかを確認したいと思います。
文字列にこれらの条件が1つもない場合は、エラーメッセージを返します。

誰でも正しい正規表現を見つけるのを助けることができますか?

答えて

3

私は

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 

は、使用のこのサンプルがお役に立てば幸いmatch()機能をお勧めしたいです。テストするには

: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より用語cossinなどかの少なくとも一つの少なくとも一つの文字その他の場合は、*などは、文字列で見つけることができます。

したがって、文字列が文字「0-9*\/:+ -」のみで構成されているか、または指定したキーワードが含まれていない場合は一致しません。

+0

Vimには先読みアサーションがあります。あなたはここでそれらを必要としません。 – sehe

+0

ありがとうTim。私はまだあなたが書いたコードでmyvarをチェックする方法を理解していません。 myvarのチェック方法の例を教えてください。注:myvarに** ** [0-9 * \ /:+ - ] '文字しかない場合、またはmyvarに' cos \ | sin \ | tan \ | log'が含まれている場合にmyvarが一致する – remio

+0

@sehe:ありがとう、私はしなかったそれは分かりません。 –

関連する問題