【问题标题】:jayway JsonPath + ruby regexpjayway JsonPath + ruby​​ 正则表达式
【发布时间】:2015-08-13 14:32:32
【问题描述】:

我对正则表达式几乎是新手。

我正在使用 jaywayruby regexp 编写 JsonPath 表达式 我想通过仅匹配图书作者属性的前 2 个字母来查找节点

实际表达方式

$..book[?(@.author =~ /\A.{0}(Ni).*/)]

找到我需要的东西

[
   {
      "category" : "reference",
      "author" : "Nigel Rees",
      "title" : "Sayings of the Century",
      "price" : 8.95
   }
]

来自

{
"store": {
    "book": [
        {
            "category": "reference",
            "author": "Nigel Rees",
            "title": "Sayings of the Century",
            "price": 8.95
        },
        {
            "category": "fiction",
            "author": "Evelyn Waugh",
            "title": "Sword of Honour",
            "price": 12.99
        },
        {
            "category": "fiction",
            "author": "Herman Melville",
            "title": "Moby Dick",
            "isbn": "0-553-21311-3",
            "price": 8.99
        },
        {
            "category": "fiction",
            "author": "J. R. R. Tolkien",
            "title": "The Lord of the Rings",
            "isbn": "0-395-19395-8",
            "price": 22.99
        }
    ],
    "bicycle": {
        "color": "red",
        "price": 19.95
    }
},
"expensive": 10

}

你知道更干净的正则表达式吗?什么是不必要的或应该添加到实际的正则表达式中?

【问题讨论】:

    标签: json regex jsonpath


    【解决方案1】:

    让我试一试。

    正则表达式/\A.{0}(Ni).*/ 表示:

    1. \A - 匹配字符串的开头
    2. .{0} - 匹配除换行符以外的任何字符 0 次
    3. (Ni) - 匹配并捕获到第 1 组文字 Ni
    4. .* - 尽可能多地匹配除换行符以外的 0 个或多个字符

    您只需检查与=~ 的匹配项。

    不需要的部分是第 1 点和第 2 点。删除\A,因为表达式默认是锚定的。删除.{0},因为它没有意义。

    .* 似乎是必要的,因为表达式应该匹配整个字符串。作为一个小的改进,从(Ni) 中删除括号,因为您没有使用任何反向引用。请注意,从逻辑角度来看,使用正则表达式捕获/存储我们已经知道的内容是没有意义的,除非有特定目的(例如,将字符串拆分为数组)。

    因此,使用

    $..book[?(@.author =~ /Ni.*/)]
    

    请注意,添加 /i 修饰符会使表达式也匹配以 ni 开头的值。

    【讨论】:

    • 谢谢,但是没有,'$..book[?(@.author =~ /\ANi/)]' 没有找到任何东西,你可以检查表达式 [这里](@ 987654321@.*REES/i%29])
    猜你喜欢
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多