正则表达的理解

时间:2017-06-22 12:36:01

标签: regex jsonschema json-schema-validator

我试图了解下面代码段的Json架构定义,

  "translated_string": {
    "description": "A translated string",
    "type": "string",
    "minLength": 1,
    "not": {
      "type": "string",
      "pattern": "^\\s+$"
    }
  },

问题:

  1. \\s代表什么。

  2. 通过提供一些示例有效架构来解释代码段。

1 个答案:

答案 0 :(得分:3)

在正则表达式语法中,\s是表示空格的元字符(请参阅Shorthand Character Classes)。在某些语言中,由于斜杠(\\s),您需要对其进行双重转义。

让我们分析正则表达式:

  • ^是字符串的开头
  • \\s是空格
  • +是一个含有“一个或多个”
  • 的运算符
  • $是字符串的结尾

因此模式匹配仅由至少一个空格组成的字符串,仅此而已。

现在让我们分析一下片段:

  • "description"只是与translated_string属性
  • 相关联的说明
  • "type": "string"表示在JSON中,您只能使用translated_string属性的字符串值
  • "not"表示以下允许:
    • "pattern": "^\\s+$"是上面的正则表达式(因此必须匹配)

请注意,该代码段相当于:

"translated_string": {
  "description": "A translated string",
  "type": "string",
  "not": {
    "type": "string",
    "pattern": "^\\s*$"
  }
},

*运算符表示“零或更多”)或甚至更简单:

"translated_string": {
  "description": "A translated string",
  "type": "string",
  "pattern": "^\\S+$"
},

(其中\\S不是空格)

因此,以下JSON 正确

"translated_string": "l"
"translated_string": " l"
"translated_string": " l "
"translated_string": "  l "

以下JSON 不正确

"translated_string": ""
"translated_string": " "
"translated_string": "  "
"translated_string": 1
"translated_string": [ SOMETHING ]
"translated_string": { SOMETHING }