正则表达式,xsd中的模式匹配

时间:2011-07-25 16:32:36

标签: regex

我想知道如何为除*+之外的任何字符制作正则表达式。我尝试了([^*+])(\[^*+]),但这两个表达式似乎都不正确。有人可以指点我正确的方向吗?谢谢。

编辑:这是一个代码snipet。我已将下面建议的注册表附加到visual studio中,当我输入常规字符串时它仍然会生成错误。

<xsd:element name="elementName">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:pattern value="/^[^*+]+$/"></xsd:pattern>
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>   

编辑:我正在使用的示例字符串是“test” 结果是模式约束失败,当前reg ex:/^[^*+]+$/

3 个答案:

答案 0 :(得分:18)

XML Schema regex flavor中,您不得添加正则表达式分隔符(即/两端的/^[^*+]+$/)。您也不需要使用锚点(即开头为^,末尾为$);所有正则表达式匹配都自动锚定在两端。该行应为:

<xsd:pattern value="[^*+]+"></xsd:pattern>

...意味着整个元素必须包含除*+之外的任何字符中的一个或多个。

答案 1 :(得分:0)

您需要测试整个字符串。但是你实际上不必在字符类中转义它:

/^[^*+]+$/

答案 2 :(得分:-1)

你很亲密:

[^*+]

enter image description here

请注意,不需要在方括号内转义那些字符,因为它们没有特殊含义。

编辑:根据http://www.regular-expressions.info/charclass.html

  

请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(),插入符号(^)和连字符( - )。通常的元字符是字符类中的普通字符,不需要通过反斜杠进行转义。要搜索星号或加号,请使用[+ *]。如果你逃避字符类中的常规元字符,你的正则表达式将正常工作,但这样做很明显   降低了可读性。

所以问题不在于逃避角色。也许你需要匹配所有那些出现。在那种情况下,查看@ Cfreak的答案。