正则表达式只捕获一些数据,而不是所有数据

时间:2017-08-16 13:26:39

标签: regex gawk

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

[*] 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。

1 个答案:

答案 0 :(得分:1)

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

您可以使用[^A-Z]*代替.*

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

<强>详情

  • ^ - 行的开头
  • \[ - [
  • . - 任何字符
  • \] - ]
  • [^A-Z]* - 除ASCII大写字母以外的任何0 +字符
  • \s - 空白
  • ([A-Z].*) - 第1组:大写的ASCII字母和行的其余部分
  • $ - 行尾