2014-12-11 1 views
2

Ниже приведено простое значение типа шаблона = "[^\*]*", которое отвергает любое появление звездочки в строке, которая является символом, который мы обозначили как пустая строка соответствующий столбец базы данных:Регулярное выражение XML Schema, которое позволяет отображать символ последовательно, но отклоняется, если появляется только один раз.

<xsd:simpleType name="StringMin1Max80TypeBase"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:minLength value="1"/> 
     <xsd:maxLength value="80"/> 
     <xsd:pattern value="[^\*]*"/> 
    </xsd:restriction> 
</xsd:simpleType> 

Некоторые из наших simpleTypes не имеют такого значения шаблона для того, чтобы позволить людям, чтобы войти в *. Кто-то недавно представил элемент с указанным выше типом, который имеет эту строку: **WARNING**, поэтому этот элемент был непреднамеренно отклонен. Есть ли способ разрешить последовательные символы, такие как ** или *** и т. Д., Но отклонить появление ровно одного символа? Я знаю, что регулярные выражения XML Schema не используют отрицательный lookbehind и отрицательный lookahead, а символы < и ? недопустимы в значении шаблона.

Если это возможно, как насчет также разрешения *string*, то есть нескольких символов, но не одного?

Большое спасибо.

ответ

1

Итак, вы просто хотите убедиться, что ни звездочки, ни два или более из них? Это следует сделать это:

<xsd:pattern value="([^*]*\*){2,}[^*]*"/> 

Это то, что я придумал для вашего второго вопроса, но я понял, что это ответ на ваш первый вопрос тоже.

UPDATE: В соответствии с приведенным ниже комментарием регулярное выражение также должно соответствовать строке без звездочек. Не проблема; просто добавьте альтернативу, которая соответствует одному или нескольким нестерическим символам:

<xsd:pattern value="([^*]*\*){2,}[^*]*|[^*]+"/> 
+0

Большое спасибо, Алан. Это работает для обоих случаев! – user1601696

+0

Теперь меня спрашивают, можем ли мы отбросить точно единственный символ звездочки, но принять все остальное, включая одну звездочку, которая встречается внутри строки, например, * x. Таким образом, единственным отклоненным случаем является одиночная звездочка: *. Благодарю. – user1601696

+0

Похоже, вам не нужно беспокоиться о случае «всего лишь одного звездочка». Мое оригинальное регулярное выражение должно совпадать как минимум с двумя символами, а альтернатива, которую я только что добавил к нему, не соответствует звездочкам. Это сделает это для вас? –

Смежные вопросы