正则表达式只捕获部分数据,而不是全部
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 字母和行的其余部分
$
- 行尾
我正在尝试使用正则表达式从以下几行中捕获一些数据:
[*] 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 字母和行的其余部分$
- 行尾