我正在尝试让管道(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“|”声明好吗?
答案 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?=");