带括号的简单布尔表达式的正则表达式

时间:2014-02-05 12:43:16

标签: c# regex c#-4.0 pattern-matching

我正在尝试编写应该只获得以下模式的正则表达式:

WordWihoutNumbers.WordWihoutNumbers='value'

和具有多个子表达式的模式,如:

WordWihoutNumbers.WordWihoutNumbers='value' OR WordWihoutNumbers.WordWihoutNumbers='value2' AND WordWihoutNumbers.WordWihoutNumbers='value3'

WordWihoutNumbers必须至少有两个字符且没有数字。

例如,那些是有效的字符串:

  • Hardware.Make =”联想
  • Hardware.Make ='Lenovo'OR User.Sitecode ='PRC'

那些不是:

  • Hardware.Make ='Lenovo'OR =>因为OR运算符之后没有任何内容
  • Hardware.Make ='Lenovo => '缺少
  • Hardware Make ='Lenovo => 。丢失
  • Hardware.Make'Lenovo'=> =缺少

我使用RegexBuddy编写以下正则表达式字符串:

(?i)(\s)*[a-z][a-z]+(.[a-z][a-z]+)(\s)*=(\s)*'[a-z0-9]+'(\s)*((\s)*(AND|OR)(\s)*[a-z][a-z]+(.[a-z][a-z]+)(\s)*=(\s)*'[a-z0-9]+')*

当我使用RegexBuddy进行测试时,它工作得很好但是当我在C#代码中使用它时,我总是得到“假”结果。

我做错了什么?

这就是我在C#代码中所做的:

string expression = "Hardware.Make=’Lenovo’ OR User.Sitecode=’PRC’";
Regex expressionFormat = new Regex(@"(?i)(\s)*[a-z][a-z]+(.[a-z][a-z]+)(\s)*=(\s)*'[a-z0-9]+'(\s)*((\s)*(AND|OR)(\s)*[a-z][a-z]+(.[a-z][a-z]+)(\s)*=(\s)*'[a-z0-9]+')*");
bool result = expressionFormat.IsMatch(expression );

,结果参数始终为false


更新:感谢@nhahtdh的评论,我在输入检查中使用代替' 我需要在此表达式中添加括号验证,例如: ((WordWihoutNumbers.WordWihoutNumbers='value' OR WordWihoutNumbers.WordWihoutNumbers='value2') AND WordWihoutNumbers.WordWihoutNumbers='value3')有效,但

WordWihoutNumbers.WordWihoutNumbers='value' OR WordWihoutNumbers.WordWihoutNumbers='value2') AND WordWihoutNumbers.WordWihoutNumbers='value3')无效。

是否可以使用Regex实施?你有什么想法吗?


1 个答案:

答案 0 :(得分:0)

感谢@nhahtdh找到了我的问题。

问题是'是不同的代码点,这就是我的正则表达式不起作用的原因(这是输入问题)。