gpt4 book ai didi

java - 如何对包含多行组的正则表达式执行多个查找?

转载 作者:行者123 更新时间:2023-12-02 12:00:05 25 4
gpt4 key购买 nike

  • 平台:Java
  • 当前模式:(/[^:"()]+\..[^: "()]+).*(\d.*?):(\d.*)?.*?((?:警告|错误|注释): .+)
  • 问题:对于第 4 组,它仅匹配到行尾。如果我添加 DOTALL 它只会找到一组包含上次查找的描述的组。

我想要查找匹配项的输入 - 进入 pattern.compile(String) 的输入:

Build failed: Command failed with exit code 1.
stderr: /sample/path/to/SampleFile.java:1: error: [PackageLocation] Expected package /sample/path/to/ to be declared in a directory ending with /sample/path/to, instead found /sample/path/To
package sample.path.to;
^
(see http://errorprone.info/bugpattern/PackageLocation)
/sample/path/to/SampleFile2.java:-1: note: Some input files use or override a deprecated API.

/sample/path/to/SampleFile2.java:-1:6 note: Recompile with -Xlint:deprecation for details.

预期输出:

查找 0

  • 组 1:/sample/path/to/SampleFile.java
  • 第 2 组:1
  • 组 3:
  • 组 4: 错误:[PackageLocation] 预期包/sample/path/to/在以/sample/path/to 结尾的目录中声明,但却找到了/sample/path/To ; ^(参见http://errorprone.info/bugpattern/PackageLocation)

查找 1

  • 组 1:/sample/path/to/SampleFile2.java
  • 第 2 组:1
  • 组 3:
  • 第 4 组:注意:某些输入文件使用或覆盖已弃用的 API。

查找 2

  • 组 1:/sample/path/to/SampleFile2.java
  • 第 2 组:1
  • 第 3 组:6
  • 第 4 组:注意:使用 -Xlint:deprecation 重新编译以了解详细信息。

最佳答案

代码

对您的正则表达式进行一些细微的修改,您就可以使用它。

See regex in use here

(/[^:" ()]+\..[^: "()]+):-?(\d.*?):(\d.*)?.*?((?:warning|error|note): (?:(?![\r\n]{2})[\s\S])+)
^^^ ^^^^^^^^^^^^^^^^^^^^^^^^
<小时/>

说明

我决定使用双换行符(因为这似乎是 3 行之间的公共(public)分隔符),而不是依靠行尾来确定匹配的结束。我将重点解释我添加/修改的部分。

  1. 我将 .* 更改为 :-?
    • 虽然这可能是一个很小的变化,但它可能会帮助您将来不再捕获字符串的错误部分。
  2. (?:(?![\r\n]{2})[\s\S])+ 匹配以下一次或多次 ( tempered greedy token )
    • (?![\r\n]{2}) 负向前瞻确保后面的内容不完全是两个换行符
    • [\s\S] 匹配任意字符(包括换行符)

关于java - 如何对包含多行组的正则表达式执行多个查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47331691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com