Regex xsd中的正则表达式、模式匹配

Regex xsd中的正则表达式、模式匹配,regex,Regex,我想知道除了*和+之外,如何为任何字符生成正则表达式。我尝试了([^*+])和(\[^*+]),但这两个表达式似乎都不正确。有人能给我指一下正确的方向吗?谢谢 编辑:这是一个代码片段。我已将下面建议的reg-ex附加到visual studio中,当我输入常规字符串时,它仍会生成错误 <xsd:element name="elementName"> <xsd:simpleType> <xsd:restriction base="xsd:str

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

编辑:这是一个代码片段。我已将下面建议的reg-ex附加到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” 结果是模式约束在当前注册表项下失败,例如:
/^[^*+]+$/

您已接近:

[^*+]

请注意,没有必要转义方括号内的这些字符,因为它们在方括号中没有特殊意义

编辑:根据:

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


所以问题不在于角色转义。也许你需要匹配所有这些事件。在这种情况下,请查找@Cfreak的答案。

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

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

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


…意思是整个元素必须由一个或多个字符组成,除了
*
+

你的答案被列为他尝试过的事情之一。。。你确定他们不能逃脱吗?奇怪的是,他声称已经试过了。@g.d.d.c也许这不是所有的正则表达式引擎都是如此。。也许他可以试着在他试过的地方给我们完整的代码样本。@Gabi-问题是你需要测试整个字符串。它将只测试第一个字符。看看我的答案。也许你的工具默认会这么做,但大多数编程语言都不会。我在原始问题后面附加了一段代码片段。我做错什么了吗?如果我去掉模式匹配,当我输入一个常规字符串时,它不会产生错误……否则reg-ex似乎对我不起作用。谢谢@g、 d.d.c:您不必在表达式中转义它们,但您可能需要在代码中转义它们,以便正则表达式看到适当的未转义值,这取决于您定义正则表达式的方式。当我尝试输入该模式时,仍然会遇到模式约束失败。我不熟悉visual studio。您可能需要删除开头和结尾的
/
字符great!这很有效。您能解释一下语句末尾的美元符号的含义吗?它与字符串的结尾相匹配。是的,您需要删除斜杠。您也不需要锚定(
^
$
),但是XSL处理器可能会忽略这些锚定。