使用ER验证自定义表达式

时间:2012-01-30 12:13:08

标签: regex entity-relationship

我正在尝试验证自定义表达式。该表达式包含以下条件:

  • 号码位置;
  • 类型操作;
  • 表达;
  • 别名(可选);
  • 评论(可选);

条件以“|”分隔管。因此,四个管道是限制。

所以,要成为一个有效的表达式:

0 | S |写(& var1)| alias1 | my coment - OK
0 | K |写(& var1)| alias1 | my coment - FAIL
1 | I |读(安培; VAR2)|别名2 | - 好的 1 | S |读(安培; VAR1)|| - 好的 2 | N | if(& var1 ==& var2); read(& var3)|| - 好的 3 | S ||| - 失败
3 | I |写(& var1)|别名3 | - 失败
3 | N |写(& var1)| alias1 | my coment | - 失败

我正在使用此ER验证:

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

但是我无法验证以管道结尾的表达式。因为,在评论中可以有除管道之外的任何特征......

有些想法??

由于

2 个答案:

答案 0 :(得分:1)

在正则表达式的末尾尝试使用[^|]代替(.+)?

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

作为旁注:对于每个子表达式 subexpr ,以下正则表达式是等效的:

((subexpr)+)?

(subexpr)*

答案 1 :(得分:0)

如果它是除管道之外的任何字符,您可以修改正则表达式,以便最后添加此规则:

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