Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用ER验证自定义表达式_Regex_Entity Relationship - Fatal编程技术网

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 | 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 | 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)*