2012-02-18 10 views
2

パイプ(OR)を動作させようとしています。私はこれらのテストでこの正規表現を持っています:正規表現OR(|)どのように動作しますか?

string output = "test: {0} matches"; 
    string test = "AND [Field] ="; 

    Regex r = new Regex(@"AND|OR\s[?\w+]?\s?="); 

    if (r.IsMatch(test)) 
     Console.WriteLine(string.Format(output, test)); 

    test = "OR [Field] ="; 
    if (r.IsMatch(test)) 
     Console.WriteLine(string.Format(output, test)); 

最初の試合は成功しますが、2番目の試合は失敗します。私は理由を理解できない| ANDとORの間のORはOR文のようには動作しません。私はAND | ORのまわりに括弧を入れてみましたが、どちらのテストも失敗します。

誰でもOR "|"声明?

答えて

2

正規表現の中で、交替(|)は配列より低い優先順位を持っています。あなたの正規表現のパターンは "ANDまたは(ORに続いて)"と解釈されます(優先度を付けるために括弧を付けました)。

あなたが望むものを達成するには、AND|OR部分をかっこで囲み、[]の文字をエスケープする必要があります。

Regex r = new Regex(@"(AND|OR)\s\[?\w+\]?\s?="); 

さらに、あなたはおそらく](またはその逆)することなく、[を許可する必要はありません。どちらも存在する必要がありますか、どちらも存在していないか、どちらもありません。

Regex r = new Regex(@"(AND|OR)\s(\[\w+\]|\w+)\s?="); 
+0

ありがとうございます。私は、中括弧を忘れていました。 –

4

周りの括弧(AND | OR)を置くことに加えて、あなたもエスケープする必要がある[と]:

(AND|OR)\s\[?\w+\]?\s?= 
+0

ありがとうございます。簡単なことだと思った。 –

関連する問題