正则表达式用于XSD中的模式匹配

问题描述

我正在编写XSD模式限制,并且具有以下有效的字符串

  1. $ name
  2. {。newvalue}
  3. {测试}
  4. $ name.testing

以下内容无效

  1. {$ testing}
  2. $ testing}
  3. {测试

不允许使用大写字母或@符号。

我已经部分<xs:pattern value="\{\w?[a-z0-9A-Z\.]*\}|\$\w+(\.[\w]+)*"/>尝试过这项工作,但不满足所有条件

感谢您的帮助。

解决方法

您可以使用

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

XSD正则表达式始终固定在字符串开始/结束处,请参见regex demo

详细信息

  • \$[a-z0-9]+(\.[a-z0-9]+)*-$,一个或多个小写ASCII字母,然后是零或mre的点序列以及一个或多个小写ASCII字母
  • |-或
  • \{\.?[a-z0-9]+\}-{,一个可选的.,然后是1个或多个小写ASCII字母,然后是}字符。
,

尝试\{?\$?[a-z.]+\}?

弄清楚实际规则是不容易的:您尝试的正则表达式允许使用数字,但是没有一个示例使用数字。并且您尝试使用的正则表达式明确允许使用大写字母,但是您的文字表明不允许使用大写字母。为什么要特别提及“ @”,而不提及其他标点字符?