regex - xsd 断言中的正则表达式仅限于元素值的开头
问题描述
我在 xsd 模式 1.1 中创建了包含正则表达式的断言。表达式应该从元素值的开头排除罗马数字和后面有句点和空格的数字。根据我的阅读,我不需要在 xsd 模式 b/c 中锚定正则表达式,它应该已经应用于开始(我可能误解了这一点)。我无法将正则表达式限制在开头。
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>
误报是:
Fid 的错误。R.克里姆。Z
装运 COD
我不能将开始与数字表达式 b/c 一起使用,这根本不起作用。但是,当我将starts-with 与其他表达式一起使用时,它不适用于整个元素值。
有没有办法将表达式限制为元素的第一个单词或开头?
解决方案
我会发表评论,但还没有声誉点可以发表评论。但是您可以强制您的正则表达式开始,而不是这样做:
'[\d] ...
做这个:
'^\s*[\d] ..
"^" 强制开始,"\s*" 处理任何流氓空白。
推荐阅读
- c# - 停止执行,关闭表单并返回给调用者
- rx-java2 - Flowable.concatMapEagerDelayError 无法按预期工作,如果第一个尚未完成,则不会执行下一个项目的订阅(v2.2.6)
- php - Doctrine Migrations 总是添加相同的查询
- javascript - 过滤具有 2 天前时间戳的对象
- python - DJANGO Signal.disconnect - 结果不一致(真的很奇怪)
- mysql - 使用 MySQL Prepared Statements 并且仍然能够进行注入
- oracle11g - TO_NUMBER,指定查询中的小数点分隔符
- linux - 更改 Nexus 默认数据目录
- mysql - SQL Time difference between TIMESTAMP and TIME columns
- python - 无法在 sublime text 3 中运行 python 脚本,因为构建 (CTRL+B) 不起作用