【问题标题】:Exclude expressin '?!' cannot be validated排除表达式'?!'无法验证
【发布时间】:2017-09-02 12:23:55
【问题描述】:
在我的 xsd 架构中,有一个特定的正则表达式 <xs:pattern value="(?!TR)[A-Z]{2}"/> 模式会导致错误。我只想忽略“TR”并匹配所有其他国家/地区代码。尽管正则表达式在几个在线编辑器中都可以正常工作,但 Eclipse 表示:
InvalidRegex:模式值 '(?!TR)[A-Z]{2}' 不是有效的正则表达式。报告的错误是:“当前选项设置不支持此表达式。”
尽管它是一个简单的表达式,但无法弄清楚为什么它不能被验证。由于此错误,我无法将 xsd 文件部署到服务总线。 aclipse 本身或其他有问题吗?
非常感谢所有建议!
【问题讨论】:
标签:
regex
xml
eclipse
xsd
【解决方案1】:
XML Schema regex flavor 不支持环视。您的正则表达式的非环视版本是
[A-SU-Z][A-Z]|[A-Z][A-QS-Z]
或者,使用character class subtraction:
[A-Z-[T]][A-Z]|[A-Z][A-Z-[R]]
见regex demo
请注意,我在演示中使用 ^ 和 $ 只是因为那里的风味是 PCRE。在 XSD pattern 中,正则表达式默认是锚定的,不需要 ^ 和 $。
模式详情:
-
[A-SU-Z](或[A-Z-[T]])- any uppercase ASCII letter other thanT`
-
[A-Z] - 任何大写的 ASCII 字母
-
| - 或
-
[A-Z] - 任何大写的 ASCII 字母
-
[A-QS-Z](或[A-Z-[R]]) - 除R 之外的任何大写ASCII 字母