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

Regex for pattern matching in XSD

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

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

以下无效

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

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

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

感谢任何帮助。

您可以使用

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

XSD 正则表达式始终锚定在字符串 start/end 处,请参阅 regex demo

详情

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

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

弄清楚实际规则是什么并不容易:您尝试的正则表达式允许数字,但 none 示例使用数字;并且您尝试的正则表达式明确允许大写,但您的文字表明不允许大写。为什么你特别提到'@',而不是其他标点符号?