2012-02-08 7 views
1

正規表現で特定の一致を無視することはできますか?例えば正規表現での一致を除外

私は次の正規表現があります

^[0-9]{2}$ 

しかし、私は、特定の文字列に一致するのは、 "12" を言わせたくありません。

私はのような正規表現の演算子を探していますが、.NET/C#ではこれを見つけることができませんでした。

正規表現自体でこれを行うことをお勧めします。 アドバイスやご提案はありますか?

答えて

4
^[0-9]{2}(?<!12)$ 

またはリバース:

^(?!12)[0-9]{2}$ 

このの具体的なの場合、特定の一致を1つ否定することに注意してください簡単でした。時々そうではなく、時にはそれは不可能であり、正規表現に依存します。

+0

優れた!これはどのように呼び出されますか?私はそれについてもっと詳しく知りたいです。:) – Meryovi

+0

[Negative lookbehind&lookaheads @ regularexpressions.info](http://www.regular-expressions.info/lookaround.html) – Wrikken

+0

ありがとう!これは非常に便利です。 – Meryovi

1

あなたが好きなものをやって方がいいでしょう:

if (Regex.IsMatch(MyString, @"^[0-9]{2}$") && MyString != "12") 
{ 
    // Do something 
} 

正規表現は非常に強力ですが、それらを使用しないようにするときには、知っておくことが重要です:)

+0

これは文字列です! ;) – m0skit0

+0

@JOE:私は同意しますが、このケースでは、Wrikkenの答えは簡単です。あなたはlookaroundを知っています –

+0

RegexpsがDBに格納され、動的に評価されるので、この場合は簡単ではありません... – Meryovi

1

あなたはこの醜い正規表現を使用することができます

^([02-9][0-9] | [1][013-9])$ 

平易な英語に翻訳し、それが「1に起動しない2桁の文字列、または1に起動しますが、ない2桁の文字列を意味し、その第2の数字として2を持っていない」と述べている。