我想从输入(proto文件)中获取所有消息块。我在下面写了regex方法,但regex模式不匹配。专家们有什么建议吗?提前谢谢。
// ^ = start of line
// message = match exact word
// . = any character
// * = any no of time
// \s = A whitespace character
// } = ends with }
public String[] getMessages(String protoFile) {
Pattern pattern = Pattern.compile("^message.*?\n\s}");
Matcher matcher = pattern.matcher(protoFile);
while (matcher.find()) {
String str = matcher.group();
System.out.println(str);
}
return null;
}
我的原始文件,我作为字符串发送到上面的方法
syntax = \"proto3\";\r\n" +
"package example;\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" +
"\r\n" +
"message MyMessage1 {\r\n" +
" enum EnumAllowingAlias {\r\n" +
" option allow_alias = true;\r\n" +
" UNKNOWN = 0;\r\n" +
" STARTED = 1;\r\n" +
" RUNNING = 1;\r\n" +
" string account = 1; \r\n" +
" }\r\n" +
"}\r\n" +
"\r\n" +
"message MyMessage2 {\r\n" +
" enum EnumNotAllowingAlias {\r\n" +
" UNKNOWN = 0;\r\n" +
" STARTED = 1;\r\n" +
" }\r\n" +
"}\r\n" +
"\r\n" +
"service Service1 { \r\n" +
" rpc getDeatils() returns (details) {\r\n" +
" } \r\n" +
"}";
我可以用大括号提取消息名和相应的内容,如下所示:
Pattern.compile("message[^\\}]*\\}");
注意:
^
-行首消除给定字符串中间的所有匹配项
*
-是一个贪婪的量词,你总是要想什么能阻止它吞噬一切
我怀疑你忘记激活DOTALL标志了。
在你的情况下,像这样的事情:
Pattern.compile("(?s)^message.*?\n\s}");
更新后,请检查此解决方案是否足够:
Pattern.compile("(?s)^message(.(?!message|service))*");
你可以使用一个在线的RegEx测试仪来验证你的模式,比如RegExPlanet。
我想得到所有的消息数据。这样它就应该在父消息的花括号之间查找消息和所有数据。有了下面的模式,我没有得到所有的父体。 在我的字符串数组列表中,我希望得到如下大小为2的响应。 应该是: 和应该是:
我需要一个正则表达式来精确匹配在字符串开头或结尾设置的字符,并将它们替换为。注意:它不应该与该字符集的部分匹配,只有当它完整地出现时。 因此,如果我有,它应该返回。 如果我有,它应该只删除,而不是开头的,因为它不是整个,而是它的一部分。 我尝试的是: “AB”不应匹配,因为它们不是单独“AB”组,而是其他单词的一部分。
我在记事本中加载了一个非常大的源代码文件,我试图使用它的regex搜索功能来查找所有使用属性的地方。 我需要找到设置属性<code>DESCR</code>的所有位置。我尝试只搜索没有正则表达式,但有太多的结果需要我筛选。我知道我正在寻找的代码要么以或
问题内容: 我有一个看起来像这样的数组: 我如何仅获取以其开头的元素? 问题答案:
问题内容: 在CSS中,如何选择所有元素开头和结尾的元素? 例如,我想选择并应用以下样式: 问题答案: 以下CSS3选择器将完成此工作: 该表示什么应该开始。 该表示什么应该结束。 本身可以用另一个属性替换,例如,应用于时(例如):
本文向大家介绍如何从R中的字符串中提取开头,结尾或中间字符?,包括了如何从R中的字符串中提取开头,结尾或中间字符?的使用技巧和注意事项,需要的朋友参考一下 在文本分析中,我们可能想从单个字符串或字符串向量中提取字符。可能需要使用此提取来创建一个新的字符串,其中包含一些需要进一步分析的特定单词。我们可以借助stringr包的str_sub函数来做到这一点。 示例 请看以下字符串- 加载纵梁包- 让我