Регулярное выражение, сопоставление образцов в xsd
Мне было интересно, как сделать регулярное выражение для любого символа, кроме *
и +
. Я пробовал ([^*+])
и (\[^*+])
, но оба выражения кажутся неправильными. Может ли кто-нибудь указать мне в правильном направлении? Благодарю.
Изменить: Вот код-снайпер. Я приложил приведенный ниже регв в визуальную студию и все еще генерирует ошибку, когда я вхожу в обычную строку.
<xsd:element name="elementName">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:pattern value="/^[^*+]+$/"></xsd:pattern>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
Изменить: строка примера, которую я использую, - это "test"
В результате сбой ограничения шаблона с текущим регистром ex: /^[^*+]+$/
Ответы
Ответ 1
В значении регулярного выражения XML Schema вы не должны добавлять разделители регулярных выражений (т.е. /
в конце /^[^*+]+$/
). Вам также не нужно использовать якоря (т.е. ^
в начале и $
в конце); все совпадения регулярных выражений автоматически закрепляются на обоих концах. Эта строка должна читать:
<xsd:pattern value="[^*+]+"></xsd:pattern>
... означает, что весь элемент должен состоять из одного или нескольких любых символов, кроме *
и +
.
Ответ 2
Вам нужно проверить всю строку. Но вам действительно не нужно избегать этого в классе символов:
/^[^*+]+$/
Ответ 3
Вы были близки:
[^*+]
![enter image description here]()
Обратите внимание, что нет необходимости экранировать эти символы внутри квадратных скобок, потому что там нет особого значения.
EDIT: согласно http://www.regular-expressions.info/charclass.html:
Обратите внимание, что единственными специальными символами или метасимволами внутри класса символов являются закрывающая скобка (]), обратная косая черта(), каретка (^) и дефис (-). Обычные метасимволы являются нормальными символами внутри символьного класса и не требуют экранирования обратной косой черты. Для поиска звезды или плюс используйте [+ *]. Ваше регулярное выражение будет работать нормально, если вы избежите регулярных метасимволов внутри класса символов, но делаете это значительно уменьшает читаемость.
Таким образом, проблема заключается не в выходе символа. Возможно, вам нужно сопоставить все эти события. В этом случае найдите ответ @Cfreak.