2012-01-30 9 views
2

カスタム式を検証しようとしています。この式には、以下の条件が含まれます。ERを使用してカスタム式を検証する

  • タイプ操作;
  • 表現;
  • エイリアス(オプション)。
  • コメント(任意);

条件は "|"で区切られます。パイプ。したがって、4本のパイプが限界です。

ので、有効な式であるために:

0 | S |書き込み(& VAR1)| ALIAS1 |私のCOMENT - OK
0 | K |書き込み(& VAR1)| ALIAS1 |私のCOMENT - FAIL
1 | I |読み取り(& var2)|エイリアス2 | - OK
1 | S |読み取り(& var1)|| - OK
2 | N | if(& var1 == & var2);(& var3)を読み込みます。 - OK
3 | S ||| - FAIL
3 | I | write(& var1)|エイリアス3 | - FAIL
3 | N |書き込み(& var1)|エイリアス1 | my coment | (。?+)(S | | M | I | | N)\ \ |(

^(\ dの{1,10})\: - 私は検証するために、このERを使用しています

をFAIL [a-zA-Z0-9] +)?\ |(。+)?

しかし、私はパイプで終わる式を検証できません。なぜなら、コメントでは、パイプ以外の任意のカーナターを持つことができるからです...

何かのアイデア??

おかげ

答えて

1

はあなたの正規表現の末尾に[^|]代わりの(.+)?を使用してみてくださいすべての部分式subexpr follo用:サイドノートとして

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

翼の正規表現は同等です。

((subexpr)+)? 

(subexpr)* 
+0

素晴らしいERイゴール、ありがとう! – Giolvani

0

それは、パイプ以外の任意の文字だ場合は、最後にこのルールを追加するので、正規表現を変更することができます。

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