2017-08-16 98 views
1

我试图用正则表达式来从以下几行捕获一些数据:正则表达式只捕获了一些数据,不是所有的人

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

尝试'^ \ [。\] [^ AZ] * \ s([AZ]。* $)' –

+0

完美!谢谢 – Thermatix

+0

'gawk'只是'awk'的一个实现。如果你用'awk'来标记你的问题,除了'gawk',你将会有更多的人阅读它们并且几乎立即得到多个答案。 –

回答

1

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

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

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

详细

  • ^ - 一个[
  • . - - 行
  • \[开始任何字符
  • \] - 一个]
  • [^A-Z]* - 任何0+字符的ASCII比大写字母等
  • \s - 一个空白
  • ([A-Z].*) - 第1组:大写ASCII字母和行的其余部分
  • $ - 行末
相关问题