use strict;
my $str = '
ltm virtual /Common/byoadc-VIP {
description mylistener.byoadc.com
destination /Common/157.109.110.76:28010
ip-protocol tcp
last-modified-time 2023-04-15:13:23:53
mask 255.255.255.255
pool /Common/SSLSUPPORT-POOL
profiles {
/Common/byoadc_2024 {
context clientside
}
/Common/http { }
/Common/tcp { }
}
ltm virtual /Microsoft-Exchange/pool-int-dns-tcp-53 {
destination /Microsoft-Exchange/10.175.99.145:53
ip-protocol tcp
mask 255.255.255.255
pool /Microsoft-Exchange/pool-int-dns-53
profiles {
/Common/tcp { }
}
';
my $regex = qr/(?<=\bdestination\s\/\S+\/\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}:)(?:2[89][0-9]{3}|3[01][0-9]{3}|32[0-6][0-9]{2}|327[0-5][0-9]|6[5-9][0-9]{3}|65[0-4][0-9]{2}|6553[0-5]|(?:22|53|68|323|500|1067|2379|2380|4500|5355|6443|8005|8007|8087|8443|8444|8505|8507|9007|9090|9153|9999|10249|10250|10251|10252|10256|10257|10259|18091|18092|18093|18095|22222|23790|23791|23801|23802))/mp;
if ( $str =~ /$regex/g ) {
print "Whole match is ${^MATCH} and its start/end positions can be obtained via \$-[0] and \$+[0]\n";
# print "Capture Group 1 is $1 and its start/end positions can be obtained via \$-[1] and \$+[1]\n";
# print "Capture Group 2 is $2 ... and so on\n";
}
# ${^POSTMATCH} and ${^PREMATCH} are also available with the use of '/p'
# Named capture groups can be called via $+{name}
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 Perl, please visit: http://perldoc.perl.org/perlre.html