fork download
  1. import java.util.*;
  2. import java.util.regex.MatchResult;
  3. import java.util.regex.Pattern;
  4.  
  5. import static java.util.stream.Collectors.toList;
  6.  
  7. class Ideone {
  8. public static void main (String[] args) {
  9. String data = "/**\r\n" +
  10. " * file\r\n" +
  11. " */\r\n" +
  12. "syntax = \"proto3\";\r\n" +
  13. "package demo;\r\n" +
  14. "\r\n" +
  15. "import \"envoyproxy/protoc-gen-validate/validate/validate.proto\";\r\n" +
  16. "import \"google/api/annotations.proto\";\r\n" +
  17. "import \"google/protobuf/wrappers.proto\";\r\n" +
  18. "import \"protoc-gen-swagger/options/annotations.proto\";\r\n" +
  19. "\r\n" +
  20. "option go_package = \"bitbucket.com;\r\n" +
  21. "option java_multiple_files = true;\r\n" +
  22. "\r\n" +
  23. "schemes: HTTPS;\r\n" +
  24. "consumes: \"application/json\";\r\n" +
  25. "produces: \"application/json\";\r\n" +
  26. "responses: {\r\n" +
  27. "key:\r\n" +
  28. " \"404\";\r\n" +
  29. "value: {\r\n" +
  30. "description:\r\n" +
  31. " \"not exist.\";\r\n" +
  32. "schema: {\r\n" +
  33. "json_schema: {\r\n" +
  34. "type:\r\n" +
  35. " STRING;\r\n" +
  36. "}\r\n" +
  37. "}\r\n" +
  38. "}\r\n" +
  39. "}\r\n" +
  40. "responses: {\r\n" +
  41. "key:\r\n" +
  42. " \"401\";\r\n" +
  43. "value: {\r\n" +
  44. "description:\r\n" +
  45. " \"Wrong user.\";\r\n" +
  46. "schema: {\r\n" +
  47. "json_schema: {\r\n" +
  48. "type:\r\n" +
  49. " STRING;\r\n" +
  50. "};\r\n" +
  51. "example: {\r\n" +
  52. "value:\r\n" +
  53. " '{ \"message\": \"wrong user.\" }'\r\n" +
  54. "}\r\n" +
  55. "}\r\n" +
  56. "}\r\n" +
  57. "}\r\n" +
  58. "\r\n" +
  59. "message message1 {\r\n" +
  60. " message message2 {\r\n" +
  61. " enum Enum {\r\n" +
  62. " UNKNOWN = 0; \r\n" +
  63. " }\r\n" +
  64. " }\r\n" +
  65. " string id = 1;\r\n" +
  66. " string name = 3;\r\n" +
  67. " string account = 4;\r\n" +
  68. "}\r\n" +
  69. "\r\n" +
  70. "foo {" +
  71. " bar = baz" +
  72. "}" +
  73. "\r\n" +
  74. "\r\n" +
  75. "message User{\r\n" +
  76. " string firstName = 1 ;\r\n" +
  77. " string lastName = 2 ;\r\n" +
  78. " string middleName = 3 [(validate.rules).repeated = { min_items: 0 }];\r\n" +
  79. "}\r\n" +
  80. "\r\n" +
  81. "service Userlogin{\r\n" +
  82. " rpc Login(User) returns (APIResponse);\r\n" +
  83. "}";
  84. List<String> allmsg = Pattern.compile("(?ms)^message.*?^}")
  85. .matcher(data)
  86. .results()
  87. .map(MatchResult::group)
  88. .collect(toList());
  89.  
  90. for (int i = 0; i < allmsg.size(); i++) {
  91. System.out.format("Message %d:\n%s\n\n", i, allmsg.get(i));
  92. }
  93. }
  94. }
Success #stdin #stdout 0.09s 51064KB
stdin
Standard input is empty
stdout
Message 0:
message message1 {
    message message2 {
        enum Enum {
            UNKNOWN = 0;    
        }
    }
    string id = 1;
    string name = 3;
    string account = 4;
}

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