当前位置: 首页 > 知识库问答 >
问题:

Regex:只返回消息字符串-这是开始的消息和字符串之间的父消息花括号

督德泽
2023-03-14

我只想得到所有的消息数据。这样它就应该在父消息的花括号之间查找消息和所有数据。有了下面的代码,我也得到了服务细节以及我不想要的消息。对此专家的任何建议都要提前感谢。

String data = "/**\r\n" + 
        " * file\r\n" + 
        " */\r\n" + 
        "syntax = \"proto3\";\r\n" + 
        "package demo;\r\n" + 
        "\r\n" + 
        "import \"envoyproxy/protoc-gen-validate/validate/validate.proto\";\r\n" + 
        "import \"google/api/annotations.proto\";\r\n" + 
        "import \"google/protobuf/wrappers.proto\";\r\n" + 
        "import \"protoc-gen-swagger/options/annotations.proto\";\r\n" + 
        "\r\n" + 
        "option go_package = \"bitbucket.com;\r\n" + 
        "option java_multiple_files = true;\r\n" + 
        "\r\n" + 
        "schemes: HTTPS;\r\n" + 
        "consumes: \"application/json\";\r\n" + 
        "produces: \"application/json\";\r\n" + 
        "responses: {\r\n" + 
        "key:\r\n" + 
        "    \"404\";\r\n" + 
        "value: {\r\n" + 
        "description:\r\n" + 
        "    \"not exist.\";\r\n" + 
        "schema: {\r\n" + 
        "json_schema: {\r\n" + 
        "type:\r\n" + 
        "    STRING;\r\n" + 
        "}\r\n" + 
        "}\r\n" + 
        "}\r\n" + 
        "}\r\n" + 
        "responses: {\r\n" + 
        "key:\r\n" + 
        "    \"401\";\r\n" + 
        "value: {\r\n" + 
        "description:\r\n" + 
        "    \"Wrong user.\";\r\n" + 
        "schema: {\r\n" + 
        "json_schema: {\r\n" + 
        "type:\r\n" + 
        "    STRING;\r\n" + 
        "};\r\n" + 
        "example: {\r\n" + 
        "value:\r\n" + 
        "    '{ \"message\": \"wrong user.\" }'\r\n" + 
        "}\r\n" + 
        "}\r\n" + 
        "}\r\n" + 
        "}\r\n" + 
        "\r\n" + 
        "message message1 {\r\n" + 
        "    message message2 {\r\n" + 
        "        enum Enum {\r\n" + 
        "            UNKNOWN = 0;    \r\n" + 
        "        }\r\n" + 
        "    }\r\n" + 
        "    string id = 1;\r\n" + 
        "    string name = 3;\r\n" + 
        "    string account = 4;\r\n" + 
        "}\r\n" + 
        "\r\n" + 
        "message User{\r\n" + 
        "   string firstName = 1 ;\r\n" + 
        "   string lastName  = 2 ;\r\n" + 
        "   string middleName  = 3 [(validate.rules).repeated = { min_items: 0 }];\r\n" + 
        "}\r\n" + 
        "\r\n" + 
        "service Userlogin{\r\n" + 
        "   rpc Login(User) returns (APIResponse);\r\n" + 
        "}";
List<String> allmsg = Arrays.asList(data.replaceAll("(?sm)\\A.*?(?=message)", "").split("\\R+(?=message)"));

我期待响应如下在我的字符串大小为2的数组列表。

好的。get(0)应该是

message message1 {
    message message2 {
        enum Enum {
            UNKNOWN = 0;    
        }
    }
    string id = 1;
    string name = 3;
    string account = 4;
}

好的。get(1)应该是

message User{
    string firstName = 1 ;
    string lastName  = 2 ;
    string middleName  = 3 [(validate.rules).repeated = { min_items: 0 }];
}

共有1个答案

潘安平
2023-03-14

你应该看看其他问题。

Pattern.compile("(?s)^message(.(?!message|service))*");

In message可以出现在message之后

"消息消息1{\r\n"

你必须调整正则表达式。

 类似资料:
  • 我想得到所有的消息数据。这样它就应该在父消息的花括号之间查找消息和所有数据。有了下面的模式,我没有得到所有的父体。 在我的字符串数组列表中,我希望得到如下大小为2的响应。 应该是: 和应该是:

  • 问题内容: 我正在尝试在我的PHP应用程序中读取JSON消息,这是我的php代码: 当我这样做时,出现以下错误: 这是页面请求的请求主体: 这是请求标头: 但是,如果我改为回显变量,则会得到以下结果: 因此,看起来是以字符串形式而不是以JSON形式读取它,这会使解析起来更加困难。 知道为什么它不以JSON形式返回,或者如何使它以JSON形式返回吗? 问题答案: 您使用的是创建关联数组,而不是对象。

  • 问题内容: 谁能告诉我如何从控制器返回字符串消息? 如果我只是从控制器方法返回一个字符串,那么spring mvc会将其视为jsp视图名称。 问题答案: 使用以下命令在控制器中注释方法: 来自:15.3.2.6将响应主体与注释映射: 该注释[…]可以放在一个方法,并且指示返回类型应当直接写入HTTP响应主体(而不是放置在一个模型,或解释为视图名称)。

  • 我调用方法从一个工人线程在下面的代码,但Android不抛出这应该说java.lang.IllegalStateExc0019:调用视图方法在另一个线程比UI线程”,因为我正在修改UI从外部的UI线程,这在Android中是禁止的。 以下是我的工作线程作为内部类的可运行状态: 注意:host OnHoldDialog是我活动的成员。 而不是抛出,android只是不根据消息更新UI。 这是虫子吗?

  • 问题内容: 我在python应用程序中使用标准的python日志记录模块: 问题是,尽管未启用调试级别,但在每次循环迭代时都会评估该愚蠢的日志消息,这会严重损害性能。 有什么解决办法吗? 在C ++中,我们提供了提供以下宏的软件包: 有效评估为 但是,由于Python(AFAIK)中没有宏,是否有一种有效的日志记录方法? 问题答案: 日志记录模块已经对您要执行的操作提供了部分支持。做这个: …代替

  • 问题内容: 所以我有以下格式的日志消息: 现在,我想删除所有不包含特定字符串“ xyz”的日志,并保留其余所有日志。我也想索引时间戳。 grokdebug没有太大帮助。 这是我的尝试: 我是新手,所以上面的模式可能没有意义。请帮忙。 问题答案: 要删除不包含字符串的消息: 您的骗子模式没有抓住日志的日期部分。 一旦在grok模式中有一个包含日期的字段,就可以在该字段上调用日期过滤器。 因此,您的g