xsd 断言中的正则表达式仅限于元素值的开头



我在 xsd 架构 1.1 中创建了包含正则表达式的断言。表达式应该从元素值的开头排除罗马数字和后面有句点和空格的数字。从我所读到的内容来看,我不需要将正则表达式锚定在 xsd 模式 b/c 中,它应该已经适用于 start(我可能误解了这一点(。我无法将正则表达式限制在开头。

XSD:

<xs:element name="node123">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:assertion test="not(matches($value, '[d].*.s.|[I].*.s.*|[V].*.s.*|[X].*.s.*|[L].*.s.*|[C].*.s.*'))"/>
<xs:assertion test="not(starts-with($value, '-'))"/>
<xs:assertion test="not(starts-with($value, '–'))"/>
<xs:assertion test="not(starts-with($value, '—'))"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

误报包括:

菲德·

已发货 C. O. D

我不能将 starts-with 与根本不起作用的数字表达式 b/c 一起使用。但是,当我将 start-with 与其他表达式一起使用时,它不适用于整个元素值。

有没有办法将表达式限制为元素的第一个单词或开头?

注释:

  1. xsd:pattern方面的 XSD 正则表达式式锚定在开始 (^( 和结束 ($(。

  2. xsd:assertion中使用的 XPath 正则表达式不是隐式锚定的。

鉴于上述情况,@WiktorStribiżew提供的正则表达式(以及他尝试添加^的建议(是排除看起来像阿拉伯或罗曼数字的字符串的目标的合理近似:

<xs:element name="node123">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:assertion test="not(matches($value, '^([-–—]|[0-9IVXLC]+.s)'))"/>
</xs:restriction>
</xs:simpleType>
</xs:element>

我会发表评论,但还没有声誉点来评论。 但是你可以强制你的正则表达式开始,而不是这样做:

'[d] ...

这样做:

'^s*[d] ..
">

^"强制开头,"\s*"处理任何恶意空格。

相关内容

最新更新