我正在尝试验证自定义表达式。该表达式包含以下条件:
条件以“|”分隔管。因此,四个管道是限制。
所以,要成为一个有效的表达式:
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] +)\ |?(。 +)?
但是我无法验证以管道结尾的表达式。因为,在评论中可以有除管道之外的任何特征......
有些想法??
由于
答案 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]+)?\|([^\|]+)?$