$re = '/Nmap scan report for scanme\.nmap\.org.*?(22|31337)\/tcp.*?(?=(Read data|Nmap scan))/ms';
$str = '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';
preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);
// Print the entire match result
var_dump($matches);
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for PHP, please visit: http://php.net/manual/en/ref.pcre.php