正则表达式只捕获部分数据,而不是全部

Regex only captures some data, not all of them

我正在尝试使用正则表达式从以下几行中捕获一些数据:

[*] 0.0.0.0:80 Cannot reliably check exploitability.

[-] {peer} - Check failed: The following options failed to validate: USERNAME, PASSWORD.

[*] 0.0.0.0:80 The target is not exploitable.

我使用的正则表达式是:

^\[.\].*\s([A-Z]{1}.*$)

问题是它导致(对于捕获组):

Cannot reliably check exploitability.
PASSWORD.
The target is not exploitable.

我想要捕获的是所有文本,它适用于其中有 ip 的文本,但另一个有点失败,我需要中间的文本是:

Check failed: The following options failed to validate: USERNAME, PASSWORD.

我不确定为什么它不能正确捕获中间那个。

这是给 gawk 看的,如果这很重要的话。

由于贪婪 .* 模式使正则表达式匹配到空格后的最后一个大写字母,第二个无法正常工作。

您可以使用 [^A-Z]* 而不是 .*:

^\[.\][^A-Z]*\s([A-Z].*)$
      ^^^^^^^

详情

  • ^ - 行首
  • \[ - 一个 [
  • . - 任意字符
  • \] - 一个]
  • [^A-Z]* - 除了 ASCII 大写字母之外的任何 0+ 个字符
  • \s - 一个空格
  • ([A-Z].*) - 第 1 组:大写 ASCII 字母和行的其余部分
  • $ - 行尾