【问题标题】:Regex for pattern matching in XSDXSD 中模式匹配的正则表达式
【发布时间】:2020-12-02 14:46:10
【问题描述】:

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

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

以下无效

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

不允许大写或@符号。

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

感谢任何帮助。

【问题讨论】:

    标签: regex xml xsd


    【解决方案1】:

    你可以使用

    <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 字母,然后是 } 字符。

    【讨论】:

    • 感谢 Wiktor 与上次这项工作一样。非常感谢。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多