2012-01-30 44 views
2

我想驗證自定義表達式。該表達式包含以下條件:驗證自定義表達式與ER

  • Number position;
  • 類型操作;
  • 表達式;
  • 別名(可選);
  • 評論(可選);

條件以「|」分隔,管。所以,四個管道是極限。

所以,是一個有效的表達式:

0 | S |寫(& VAR1)| alias1 |我COMENT - OK
0 | K |寫(& VAR1)| alias1 |我COMENT - 故障
1 | I |閱讀(& var2)| alias2 | - 好吧
1 | S | read(& var1)|| - 確定
2 | N | if(& var1 == & var2); read(& var3)|| - 好吧
3 | S ||| - 失敗
3 | I |寫(& var1)|別名3 | - 失敗
3 | N | write(& var1)| alias1 | my coment | - FAIL

我使用這個ER來驗證:

^(\ d {1,10})\ |(S | M | I | N)\ | \ |((+。?) [A-ZA-Z0-9] +)\ |?。(+)?

但我無法驗證以管道結束的表達式。因爲,在評論中可以有任何caracter除了管道...

一些想法??

感謝

回答

1

試着在你的正則表達式的結尾使用[^|]代替(.+)?

^(\d{1,10})\|(S|M|I|N)\|[^|]+\|([a-zA-Z0-9]*)\|([^|]*)$ 

作爲附帶說明:對每個子表達的Subexpr的弗洛翼正則表達式是等價的:

((subexpr)+)? 

(subexpr)* 
+0

大ER伊戈爾,謝謝! – Giolvani 2012-01-30 16:24:55

0

如果它是除了管任何字符,你可以修改正則表達式,從而在末尾添加此規則:

^(\d{1,10})\|(S|M|I|N)\|(.+?)\|([a-zA-Z0-9]+)?\|([^\|]+)?$