2015-04-22 103 views
1

我想用java的正則表達式以下情況下測試:邏輯或正則表達式

  • AB - >允許
  • 交流 - >允許
  • ABC - >允許
  • A - >禁止

這裏是A,B和C的正則表達式:

  • 答:(([0-9]{1,3})(\.[0-9]{1,3})?)
  • B:(\+([0-1](\.[0-9]{1,3}))
  • C:(-([0-1](\.[0-9]{1,3}))

所以,我怎麼能創建使用邏輯OR我正則表達式?

解決方案

^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3})))))$ 

回答

1

你可以把+-一個字符類中結合BC正則表達式,並使用以下正則表達式:

^(([0-9]{1,3})(\.[0-9]{1,3})?)([-+]([0-1](\.[0-9]{1,3}))|(\+([0-1](\.[0-9]{1,3}‌​))(\-([0-1](\.[0-9]{1,3})))))$ 

在這種情況下,總是你有A和之後有BCBC

解釋:

你的正則表達式會是ABACABC所以A後你想BCBC您可以創建BC有把+-一個字符類中:

([-+]([0-1](\.[0-9]{1,3})) 

然後使用PIP(|)爲邏輯或之間的選項和BC之間是以下內容:

(\+([0-1](\.[0-9]{1,3}))(\-([0-1](\.[0-9]{1,3})) 
+0

的順序很重要,當字符串使用兩,+是第一 - 是第二 – Athanor

+0

@Athanor那麼,什麼是錯我的回答? – Kasramvd

+1

沒什麼,我的錯誤 – Athanor

1

幾種解決方案:

  1. 寫它,你說:AB|AC|ABC

  2. 避免冗餘:A(BC?|C)A(B?C|B)

0

使用由|運算符分隔的三種模式。要匹配ABAC,只需將BC放入一個非捕獲組中,兩個模式由替換運算符分隔開。

(([0-9]{1,3})(\.[0-9]{1,3})?)(\+([0-1](\.[0-9]{1,3}))(-([0-1](\.[0-9]{1,3}))|(([0-9]{1,3})(\.[0-9]{1,3})?)(?:(\+([0-1](\.[0-9]{1,3}))|(-([0-1](\.[0-9]{1,3}))) 
|<-----------------------------------ABC----------------------------------->|<------------AB or AC----------------------------------------------------------->