我想知道如何为除*
和+
之外的任何字符制作正则表达式。我尝试了([^*+])
和(\[^*+])
,但这两个表达式似乎都不正确。有人可以指点我正确的方向吗?谢谢。
编辑:这是一个代码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:/^[^*+]+$/
答案 0 :(得分:18)
在XML Schema regex flavor中,您不得添加正则表达式分隔符(即/
两端的/^[^*+]+$/
)。您也不需要使用锚点(即开头为^
,末尾为$
);所有正则表达式匹配都自动锚定在两端。该行应为:
<xsd:pattern value="[^*+]+"></xsd:pattern>
...意味着整个元素必须包含除*
和+
之外的任何字符中的一个或多个。
答案 1 :(得分:0)
您需要测试整个字符串。但是你实际上不必在字符类中转义它:
/^[^*+]+$/
答案 2 :(得分:-1)
你很亲密:
[^*+]
请注意,不需要在方括号内转义那些字符,因为它们没有特殊含义。
编辑:根据http://www.regular-expressions.info/charclass.html:
请注意,字符类中唯一的特殊字符或元字符是右括号(]),反斜杠(),插入符号(^)和连字符( - )。通常的元字符是字符类中的普通字符,不需要通过反斜杠进行转义。要搜索星号或加号,请使用[+ *]。如果你逃避字符类中的常规元字符,你的正则表达式将正常工作,但这样做很明显 降低了可读性。
所以问题不在于逃避角色。也许你需要匹配所有那些出现。在那种情况下,查看@ Cfreak的答案。