2017-08-16 38 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字母和行的其餘部分
  • $ - 行末
相關問題