regex - RegEx 限制 XSD 文件的 UTF-16 代码单元的数量
问题描述
我正在为需要发送到旧系统的 XML 文件处理 XSD 文件。此遗留系统具有以# of UTF-16 代码单元指定的字段大小限制。
例如,该字段description
包含的 UTF-16 代码单元不得超过 35 个。
我现在正在尝试提出一个可以放入 XSD 的正则表达式,以便将相应的字段值限制为最多包含 35 个 UTF-16 代码单元。
我的第一次尝试是这样的:
<xs:element name="description">
<xs:annotation>
<xs:documentation>A description for the document</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:annotation>
<xs:documentation>A sequence of up to 35 UTF-16 code units</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="^(|([\x{0}-\x{FFFF}][\x{0}-\x{FFFF}]|[\x{10000}-\x{10FFFF}]){0,17}[\x{0}-\x{FFFF}]?|[\x{0}-\x{FFFF}]?([\x{0}-\x{FFFF}][\x{0}-\x{FFFF}]|[\x{10000}-\x{10FFFF}]){0,17})$"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
这个正则表达式背后的一些背景:
- BMP(基本多语言平面)字符 (
[\x{0}-\x{FFFF}]
) 表示为单个 UTF-16 代码单元。 - 星体平面字符 (
[\x{10000}-\x{10FFFF}]
) 表示为两个 UTF-16 代码单元(作为代理对)。
我的(失败的)想法是实施这个限制:
- 最多有 17 个组,要么是 a) 一对 BMP 字符,要么 b) 单个星光层字符。
- 这些最多 17 个组可以在单个 BMP 字符之前或之后。
但显然,这对于像aaa
在两个星体平面字符之间有一个 BMP 字符这样的字符串来说是失败的。
是否有另一种方法可以限制 XSD 文件中 UTF-16 代码单元的数量?
解决方案
推荐阅读
- spring-boot - 在pcf上部署应用程序时面临内存不足的问题
- php - 数组到 HTML 表
- json - Alamofire.AFError.ResponseSerializationFailureReason.jsonSerializationFailed
- scala - 基于列表调用方法
- java - 在 Spring 项目中对 Get 请求进行单元测试
- java - 使用递归检查树路径中是否存在总和
- node.js - 使用 cron 作业启动节点 js 服务器
- python - 正则表达式如何匹配贪婪捕获前面的可选字符?
- java - 一旦调用 countDownTimer.cancel(),应用程序就会崩溃
- javascript - 如何在反应或javascript中将对象数组与另一个数组映射?