Регулярное выражение для сопоставления с образцом в XSD

#regex #xml #xsd

#регулярное выражение #xml #xsd

Вопрос:

Я пишу ограничение шаблона XSD, и у меня есть следующие допустимые строки

  1. $name
  2. {.newvalue}
  3. {тестирование}
  4. $name.testing

И приведенные ниже недопустимые

  1. {$testing}
  2. $тестирование}
  3. {тестирование

Не допускается использование символов верхнего регистра или @.

Я пробовал это <xs:pattern value="{w?[a-z0-9A-Z.]*}|$w (.[w] )*"/> эта работа частично, но не удовлетворяет всем условиям

Приветствуется любая помощь.

Ответ №1:

Вы можете использовать

 <xs:pattern value="$[a-z0-9] (.[a-z0-9] )*|{.?[a-z0-9] }" />
  

Регулярное выражение XSD всегда привязано к началу / концу строки, смотрите демонстрацию регулярных выражений.

Подробные сведения

  • $[a-z0-9] (.[a-z0-9] )* $ , одна или несколько строчных букв ASCII, а затем нулевые или mre последовательности точки и одной или нескольких строчных букв ASCII
  • | — или
  • {.?[a-z0-9] } { , необязательно . , затем 1 или более строчных букв ASCII, а затем } символ.

Комментарии:

1. Спасибо Виктору, как и в прошлый раз, когда это сработало. Большое вам спасибо.

Ответ №2:

Попробуйте {?$?[a-z.] }?

Нелегко определить, каковы фактические правила: ваша попытка регулярного выражения допускает цифры, но ни в одном из примеров цифры не используются; и ваша попытка регулярного выражения явно допускает верхний регистр, но ваш текст предполагает, что верхний регистр не разрешен. И почему вы упоминаете именно «@», а не другие знаки препинания?