【问题标题】:How to write Regular Expression for BSON Object in c++?如何在 C++ 中为 BSON 对象编写正则表达式?
【发布时间】:2015-04-28 14:35:48
【问题描述】:

我有这样的 BSON 对象,

{ "0" : "Kollywood", "1" : "Tollywood" }

我将在 mongo db 中使用这个 bson 对象 $in 查询来获取所有匹配的标签,不区分大小写。但我单独得到完全匹配的结果。

{

    "result": [
        {
            "_id": 110, 
            "tags": [
                {
                    "id": "5524cdfffe13b4934bbd6cab", 
                    "name": "Kollywood"
                }
            ]
        }
    ], 
    "ok": 1
}

我的要求是,(所有匹配的标签不区分大小写)

{

        "result": [
            {
                "_id": 110, 
                "tags": [
                    {
                        "id": "5524cdfffe13b4934bbd6cab", 
                        "name": "Kollywood"
                    },
                    {
                        "id": "5524cdfffe13b4934bbd6cab", 
                        "name": "KollyWOOD"
                    }
                ]
            }
        ], 
        "ok": 1
    }

我如何在 C++ 中做到这一点?

【问题讨论】:

    标签: c++ regex mongodb bson


    【解决方案1】:

    这是一个您可以使用的示例代码:

    string inp = "{\r\n\r\n    \"result\": [\r\n        {\r\n            \"_id\": 110, \r\n            \"tags\": [\r\n                {\r\n                    \"id\": \"5524cdfffe13b4934bbd6cab\", \r\n                    \"name\": \"Kollywood\"\r\n                }\r\n            ]\r\n        }\r\n    ], \r\n    \"ok\": 1\r\n}";
    string regx = "(\"tags\":[\\s\\r\\n]+\\[[\\s\\r\\n]+)(\\{[\\s\\r\\n]+\"id\":[\\s\\r\\n]+\"[^\"]*?\",[\\s\\r\\n]+\"name\":[\\s\\r\\n]+\")([^\"]*?)(\"[\\s\\r\\n]+\\})";
    regex rxg(regx);
    string reslt = regex_replace(inp, rxg, "$1$2$3},\r\n                $2KollyWOOD$4");
    std::cout << reslt << endl;
    

    结果:

    【讨论】:

      【解决方案2】:

      { "0" : "Kollywood", "1" : "Tollywood" }这是查询对象,我必须将其转换为以下方式

                  {
                      "$or": [
                          {
                              "tags.name": {
                                  "$regex": "^kolly wood", 
                                  "$options": "xi"
                              }
                          }, 
                          {
                              "tags.name": {
                                  "$regex": "^tolly wood", 
                                  "$options": "xi"
                              }
                          }
                      ]
                  }
      

      【讨论】:

      • 这不是 C++ 的做法。
      猜你喜欢
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2020-03-26
      • 1970-01-01
      • 2020-11-06
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多