【问题标题】:JSON schema error Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got 'undefined' with a RegexJSON 模式错误期望 'STRING'、'NUMBER'、'NULL'、'TRUE'、'FALSE'、'{'、'[',使用正则表达式得到 'undefined'
【发布时间】:2021-01-07 17:37:00
【问题描述】:

我有以下 json,但由于某种原因,我一直收到此行错误:

"Test": "Hostname:\s+(?<Hostname>[^\n]*)\s+Site name:\s+(?<SiteName>[^\n]*"

我的 JSON:

{
    "Rules": [{
        "Field": "Subject",
        "Test": "^(Azure Exception)",
        "Cases": [{
            "Field": "Content",
            "Test": "Hostname: az.....(?<Hostname>[^\n])",
            "Cases": [{
                "Field": "Content",
                "Test": "Hostname:\s+(?<Hostname>[^\n]*)\s+Site name:\s+(?<SiteName>[^\n]*)"
            }]
        }]
    }]
}

据我所知,这是一个有效的正则表达式。有谁知道我做错了什么?

我正在使用https://jsonlint.com/ 来测试我的 json。

测试正则表达式:https://regex101.com/r/l4tn4W/3/

干杯

【问题讨论】:

    标签: json regex


    【解决方案1】:

    你应该使用

    "Test": "Hostname:\\s+(?<Hostname>.*)\\s+Site name:\\s+(?<SiteName>.*)"
    

    [^\n] 匹配除换行符之外的任何字符,为了简洁起见,可以将其替换为 . 模式,因为 . 匹配除换行符之外的任何字符。

    此外,反斜杠必须加倍以形成正则表达式转义序列。

    请注意,您可能需要根据获得的结果进一步简化模式:

    "Test": "Hostname:[ \t]+(.*?)[ \t]+Site name:[ \t]+(.*)"
    

    其中\s 被替换为与空格或制表符匹配的[ \t],所有命名的捕获组都被替换为简单编号的捕获组,第一个.* 被替换为非贪婪对应物.*? , 匹配除换行符以外的任何零个或多个字符,尽可能少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多