看起来,当我试图“分组”我的匹配,我只提出了关键字,我正在寻找,而不是整个匹配。
例如,下面是我的示例输出:
Nmap scan report for scanme.nmap.org ([external-ip])
Host is up (0.082s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f
Not shown: 992 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp filtered http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
9929/tcp open nping-echo
31337/tcp open Elite
Read data files from: /usr/bin/../share/nmap
# Nmap done at Tue Oct 11 01:08:22 2022 -- 1 IP address (1 host up) scanned in 2.31 seconds
Nmap scan report for scanme.nmap.org ([external-ip])
Host is up (0.082s latency).
Other addresses for scanme.nmap.org (not scanned): 2600:3c01::f03c:91ff:fe18:bb2f
Not shown: 992 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp filtered http
135/tcp filtered msrpc
139/tcp filtered netbios-ssn
445/tcp filtered microsoft-ds
9929/tcp open nping-echo
31337/tcp open Elite
Read data files from: /usr/bin/../share/nmap
# Nmap done at Tue Oct 11 01:08:22 2022 -- 1 IP address (1 host up) scanned in 2.31 seconds
我特别要寻找的是如何从“www.example.com的Nmap扫描报告“开始scanme.nmap.org一直到“读取数据”之前的行,如果它包含31337/tcp和/或22/tcp,则匹配此行。下一个“匹配”,所以本质上我可以调用output 1或output[2],因为我的示例输出包含2个“组”并且两个组都匹配我的一个或多个关键字。
使用正则表达式Nmap scan report for scanme.nmap.org.*?(22|31337)\/tcp.*?(?=Read data|Nmap scan)
并使用output.scan(/#{regexp}/m)
,我只得到以下结果:
22
22
而不是包含2个元素的数组,在每个组中匹配31337/tcp或22/tcp。
如果我使用.match(/#{regexp}/m)
,那么这个 sorta 就可以工作。它得到1个匹配而不是2个。
编辑
使用更新的正则表达式,我想将这些多个“匹配”组合成一个数组,如下所示:
1条答案
按热度按时间mbjcgjjk1#
我对你的正则表达式做了一个小小的修改:我也省略了点,还在最后的前瞻中添加了一组新的括号。
注意:注意“点”也必须与新行匹配-即,整个文本必须被视为一行。
使用以下正则表达式跳过尾随空格:
如果存在匹配项,则捕获整个“段落”:
测试here。