首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >得到一个又一个匹配的行,直到行与其他模式匹配。

得到一个又一个匹配的行,直到行与其他模式匹配。
EN

Stack Overflow用户
提问于 2017-10-24 13:01:13
回答 1查看 180关注 0票数 1

故事-从日志文件中提取信息-在本例中,maven构建。基本上,我希望在一个给定的模式首先匹配之后,得到所有匹配一个模式的行。

换句话说,我想匹配在[WARNING]行之后以[WARNING] Javadoc Warnings开头的所有行。

我试过用这个:

代码语言:javascript
运行
复制
(?<=\[WARNING\] Javadoc Warnings).*(\r|\n|.)(?=(\[WARNING\].*))

但它只返回下一行。

代码语言:javascript
运行
复制
[WARNING] E:\workspaces\1
[WARNING] E:\workspaces\4

输入:

代码语言:javascript
运行
复制
[WARNING] E:\workspaces\asd
[WARNING] E:\workspaces\dsa

[INFO] 
12 warnings
[WARNING] Javadoc Warnings
[WARNING] E:\workspaces\1
[WARNING] E:\workspaces\2
[WARNING] E:\workspaces\3

[INFO] Building jar: E:\workspaces\asdf
[INFO] 
[INFO] >>> maven-source-plugin:3.0.1:j

[INFO] 
[INFO] <<< maven-source-plugin:3.0.1:j
[INFO] 
12 warnings
[WARNING] Javadoc Warnings
[WARNING] E:\workspaces\4
[WARNING] E:\workspaces\5
[WARNING] E:\workspaces\6
[INFO] Building jar: E:\workspaces\asdf
[INFO] 
[INFO] >>> maven-source-plugin:3.0.1:j
[INFO] 
[INFO] <<< maven-source-plugin:3.0.1:j

所期望的结果是

代码语言:javascript
运行
复制
[WARNING] E:\workspaces\1
[WARNING] E:\workspaces\2
[WARNING] E:\workspaces\3
[WARNING] E:\workspaces\4
[WARNING] E:\workspaces\5
[WARNING] E:\workspaces\6
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-24 14:03:49

您可以使用以下解决方案:

代码语言:javascript
运行
复制
(?:\G(?!\A)|\[WARNING] Javadoc Warnings)\R(\[WARNING].*)

regex演示

详细信息

  • (?:\G(?!\A)|\[WARNING] Javadoc Warnings) -一个[WARNING] Javadoc Warnings子字符串(\[WARNING] Javadoc Warnings)或(|)上一次成功匹配的结束(\G(?!\A))
  • \R -断线
  • (\[WARNING].*) - Group 1:[WARNING]子字符串和行结束后的任何0+字符

在线Java演示

代码语言:javascript
运行
复制
String s = "[WARNING] E:\\workspaces\\asd\r\n[WARNING] E:\\workspaces\\dsa\r\n\r\n[INFO] \r\n12 warnings\r\n[WARNING] Javadoc Warnings\r\n[WARNING] E:\\workspaces\\1\r\n[WARNING] E:\\workspaces\\2\r\n[WARNING] E:\\workspaces\\3\r\n\r\n[INFO] Building jar: E:\\workspaces\\asdf\r\n[INFO] \r\n[INFO] >>> maven-source-plugin:3.0.1:j\r\n\r\n[INFO] \r\n[INFO] <<< maven-source-plugin:3.0.1:j\r\n[INFO] \r\n12 warnings\r\n[WARNING] Javadoc Warnings\r\n[WARNING] E:\\workspaces\\4\r\n[WARNING] E:\\workspaces\\5\r\n[WARNING] E:\\workspaces\\6\r\n[INFO] Building jar: E:\\workspaces\\asdf\r\n[INFO] \r\n[INFO] >>> maven-source-plugin:3.0.1:j\r\n[INFO] \r\n[INFO] <<< maven-source-plugin:3.0.1:j";
Pattern pattern = Pattern.compile("(?:\\G(?!\\A)|\\[WARNING] Javadoc Warnings)\\R(\\[WARNING].*)");
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
    System.out.println(matcher.group(1)); 
} 
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46911304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档