我有一个 Ecore 模型,我正在尝试添加一些 OCL 约束。
当我尝试创建一个有效 IPv4 形式的属性(字符串)时,我的问题就出现了。我想我应该使用正则表达式,但我完全不知道如何在 OCLinEcore 上使用正则表达式。
从 Eclipse Juno 开始,您可以在 OCL 中使用正则表达式。调用它的函数是matches(regex),就像在Java中一样。
context Packet
inv ValidIPv4 : ip.matches('\b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b')
如果您有以前版本的 Eclipse,那么我建议在您的 Ecore 元素上添加 Java 约束,然后通过生成的 Java 模板代码验证您的元素。
至于正则表达式部分:
\b([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\.([0-9]{1,3})\b
匹配 0.0.0.0 到 999.999.999.999 如果您知道数据不包含无效 IP 地址,请使用此快速简单的正则表达式。4 个数字中的每一个都存储在一个捕获组中,因此您可以访问它们以进行进一步处理。