正则表达式OR(|)它是如何工作的?

时间:2012-02-18 15:13:11

标签: c# regex

我正在尝试让管道(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));

第一场比赛通过但第二场比赛失败。我无法弄清楚为什么| AND和OR之间的行为不像OR语句。我试过在AND | OR周围加上括号,但两次测试都失败了。

任何人都可以帮我处理OR“|”声明好吗?

2 个答案:

答案 0 :(得分:4)

除了将括号括起来(AND | OR)之外,还需要转义[和]:

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

答案 1 :(得分:2)

在正则表达式中,交替(|)的优先级低于序列。您的正则表达式模式被解释为“AND或(OR后跟\s[?\w+]?\s?=)”(请注意我添加的括号表示优先级)。

要实现您的目标,您需要为AND|OR部分加上括号,以及转义[]个字符。

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

此外,您可能不希望[不允许](反之亦然);两者都应该存在,或者两者都不存在:

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