2011-07-18 4 views
2

私は "and、or not、and not"という単語をチェックする必要があるsenearioを持っていますが、私が作成した正規表現は失敗します。どのようなボディが私にこれのための正しい正規表現を提供できますか?正規表現で "and、or、not、and not"の単語をチェックする?

私が作成した正規表現は、この

Regex objAlphaPattern = new Regex(@"^[not|and not|and|not]"); 
    if(objAlphaPattern.IsMatch(searchTerm)) 
    { 
    //// code 
    } 

のようなものです。しかし、それは常にtrueを返します。

「ペンと鉛筆」と「ペンペンシル」という言葉を試してみましたが、どちらも真実です。正しい正規表現を提供することは誰でも助けてくれますか?

+1

'正規表現(@ "(ない|ない|や|ではない)");'すべきです作業。 – eandersson

+0

また、正規表現とともに空白をチェックするには? –

+0

@富士:あなたの答えは本当に私を助けました。助けてくれてありがとう。 –

答えて

8

開始アンカーで始まります。それが文字列の先頭で起こっているかどうかだけをチェックしたくない場合は、^を付けてはいけません。

また、()を使用するときは[]を使用しています。実際、この場合、あなたは()も必要ありません。 []は文字クラスを示します。あなたはそれを必要としません。

Regex objAlphaPattern = new Regex("\b(and|not)\b"); 
if(objAlphaPattern.IsMatch(searchTerm)) 
{ 
//// code 
} 

これはすべきことです。

regexの構築に役立つように、The Regex Coachを強くお勧めします。

また、http://www.regular-expressions.info/を参考にしてください。

編集: 私はあなたが本当にオブジェクトインスタンスを必要としないことを指摘する必要があると感じる。

if(System.Text.RegularExpressions.Regex.IsMatch(searchTerm, "\b(and|not)\b")) 
{ 
//// code 
} 

静的メソッドを使用できます。

ティム非常に良い点だ:

"\band\b|\bnot\b" 

別の非常に良い点のstema:

"\b(and|not)\b" 
+1

または '\ b(および| not)\ b' – stema

1

はあなたの正規表現が間違っている代わりに

1

、それは(and|not)あるべき

(not)|(and not)|(and) 

を試してみてください。 and notのどちらかをチェックする必要はありません。なぜなら最初と最後で失敗するからです。

オンラインツールを使用して正規表現を確認できます。 http://regexpal.com/?flags=&regex=(and|not)&input=Pen%20and%20Pencil

+2

'android'や' notepad'にマッチしないように、カッコを単語境界アンカー '\ b'で囲む必要があります。 –