【发布时间】:2017-10-24 13:01:13
【问题描述】:
故事 - 从日志文件中提取信息 - 在这种情况下是 Maven 构建。基本上我想在首先匹配给定模式后获取与模式匹配的所有行。
换句话说,我想匹配所有在[WARNING] Javadoc Warnings 行之后以[WARNING] 开头的行。
我试过用这个:
(?<=\[WARNING\] Javadoc Warnings).*(\r|\n|.)(?=(\[WARNING\].*))
但它只返回下一行。
[WARNING] E:\workspaces\1
[WARNING] E:\workspaces\4
输入:
[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
想要的结果是
[WARNING] E:\workspaces\1
[WARNING] E:\workspaces\2
[WARNING] E:\workspaces\3
[WARNING] E:\workspaces\4
[WARNING] E:\workspaces\5
[WARNING] E:\workspaces\6
【问题讨论】:
-
@WiktorStribiżew 我不认为这是重复的。答案解释了如何在两个字符串之间进行匹配。在我的场景中,我尝试在给定匹配后匹配,直到线条满足另一个模式
-
在两个字符串之间 vs 在
^之后和另一个字符串之前,原则上,它们是相同的。 -
在 Java 中,
(?:\[WARNING\] Javadoc Warnings|\G(?!\A))\r?\n(\[WARNING\].*)可以工作,只需抓住group(1)。 -
是的,没错,Cygwin 的实现太有限了。那就用Java吧。