facet'pattern'的值'<! - \ [CDATA \ [。*?\] \] - > | [^&lt;&gt;&amp;] *'不是有效的正则表达式

时间:2015-07-17 18:27:19

标签: regex xsd cdata

我正在尝试使用正则表达式来使用xsd验证xml中的字段。我提出正则表达式来做我想要的,除非文本包含在CDATA标签中,否则禁止使用特殊字符。这是我提出的正则表达式:

<!\[CDATA\[.*?\]\]>|[^<>&]*

当我在http://regexr.com/上测试它以匹配我的模式时效果很好。问题是,当我尝试将其插入simpleType模式限制时,我收到一条错误,说它不是有效的正则表达式。

The value '<!\[CDATA\[.*?\]\]>|[^<>&]*' of the facet 'pattern' is not a valid regular expression.

这是我的xsd代码(请注意,我必须使用&lt; &gt;&amp;替换正则表达式中的&amp;&lt;&gt;所以它将是有效的xml):< / p>

<xs:element name="description" minOccurs="1" maxOccurs="1">
    <xs:simpleType>
        <xs:restriction base="xs:string">
            <xs:pattern value="&lt;!\[CDATA\[.*?\]\]&gt;|[^&lt;&gt;&amp;]*"/>          
        </xs:restriction>
    </xs:simpleType>
</xs:element>

所以我假设有一些关于正则表达式在xsd模式中工作的方式,我没有得到。

1 个答案:

答案 0 :(得分:0)

通过消除过程,我找到了一个解决方案。首先,我在表达式<!\[CDATA\[.*?\]\]>部分的某处确定了问题。所以我从表达式中撕掉了这个并慢慢地添加了一些东西,直到我得到同样的错误。造成问题的原因是?。即使CDATA内部没有任何内容,表达式仍然可以在?之后运行。

我不确定1)为什么我得到那个模式的人包括它,2)为什么xsd不能在我的模式中允许它?