2014-02-05 59 views
0

我想寫的正則表達式應該只得到了以下的模式:正則表達式

WordWihoutNumbers.WordWihoutNumbers='value'

和圖案與多個子表達式,如:

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

WordWihoutNumbers必須至少有兩個字符且沒有數字。

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

  • Hardware.Make ='聯想
  • Hardware.Make = '聯想' OR User.Sitecode = 'PRC'

和那些不是:

  • Hardware.Make ='Lenovo'OR =>因爲OR運算符後面什麼也沒有
  • Hardware.Make ='Lenovo =>'缺少
  • Hardware Make ='Lenovo =>。缺少
  • Hardware.Make'Lenovo」 => =缺少

我以前使用RegexBuddy寫以下正則表達式串:當我它使用使用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]+')* 

當我使用但它在我的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


UPDATE:感謝@nhahtdh他的評論,我在使用了我輸入檢查代替' 我需要在這個表達式中加上括號驗證,例如: ((WordWihoutNumbers.WordWihoutNumbers='value' OR WordWihoutNumbers.WordWihoutNumbers='value2') AND WordWihoutNumbers.WordWihoutNumbers='value3')有效,但是

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

是否可以使用Regex來實現?你有好主意嗎?


+0

你能展示你如何在C#代碼中包含正則表達式嗎? – nhahtdh

+0

是的現在加入 – Ofir

+0

也許你沒有加倍(逃避)\?像\\ s? –

回答

0

感謝@nhahtdh發現我的問題。

問題是'是不同的代碼點,這就是我的正則表達式不起作用的原因(這是輸入問題)。