Regex 使用ER验证自定义表达式
我正在尝试验证自定义表达式。此表达式包含以下条件:Regex 使用ER验证自定义表达式,regex,entity-relationship,Regex,Entity Relationship,我正在尝试验证自定义表达式。此表达式包含以下条件: 数字位置 类型操作 表达方式 别名(可选) 评论(可选) 条件由“|”管道分隔。所以,四根管子是极限 因此,要成为一个有效的表达式: 0 | S | write(&var1)| alias1 | my coment-OK 0 | K | write(&var1)| alias1 | my coment-FAIL 1 | I | read(&var2)| alias2 |-OK 1 | S | read(&var1)| |-OK 2 | N
- 数字位置李>
- 类型操作李>
- 表达方式李>
- 别名(可选)李>
- 评论(可选)李>
0 | K | write(&var1)| alias1 | my coment-FAIL
1 | I | read(&var2)| alias2 |-OK
1 | S | read(&var1)| |-OK
2 | N | if(&var1==&var2);阅读(&var3)| |-OK
3 | S | | |-失败
3 | I | write(&var1)|别名3 |-失败
3 | N | write(&var1)| alias1 | my coment |-失败
我使用此ER验证: ^(\d{1,10})\|(S | M | I | N)\|(.+?)\|([a-zA-Z0-9]+)?\|(.+) 但我无法验证以管道结尾的表达式。因为,在注释中可以有除管道以外的任何字符 有什么想法
谢谢如果是管道以外的任何字符,您可以修改正则表达式,以便在末尾添加此规则:
^(\d{1,10})\|(S|M|I|N)\|(.+?)\|([a-zA-Z0-9]+)?\|([^\|]+)?$
尝试在正则表达式末尾使用
[^ |]
而不是(.+)?
:
^(\d{1,10})\|(S|M|I|N)\|[^|]+\|([a-zA-Z0-9]*)\|([^|]*)$
作为旁注:对于每个子表达式subexpr,以下正则表达式是等效的:
((subexpr)+)?
及
(subexpr)*