use strict;
my $str = '# Arista
# aristaBgp4V2EstablishedNotification aristaBgp4V2PeerState
1.3.6.1.4.1.30065.4.1.0.1 0x06710000 1.3.6.1.4.1.30065.4.1.1.2.1.13(1,2)\\
# aristaBgp4V2PeerLocalPort
1.3.6.1.4.1.30065.4.1.1.2.1.6(3,0)\\
# aristaBgp4V2PeerRemotePort
1.3.6.1.4.1.30065.4.1.1.2.1.9(4,0)
# aristaBgp4V2BackwardTransitionNotificationaristaBgp4V2PeerState
1.3.6.1.4.1.30065.4.1.0.2 0x06710001 1.3.6.1.4.1.30065.4.1.1.2.1.13(1,2)\\
# aristaBgp4V2PeerLocalPort
1.3.6.1.4.1.30065.4.1.1.2.1.6(3,0)\\
# aristaBgp4V2PeerRemotePort
1.3.6.1.4.1.30065.4.1.1.2.1.9(4,0)\\
# aristaBgp4V2PeerLastErrorCodeReceived
1.3.6.1.4.1.30065.4.1.1.3.1.1(5,0)\\
# aristaBgp4V2PeerLastErrorSubCodeReceived
1.3.6.1.4.1.30065.4.1.1.3.1.2(6,0)\\
# aristaBgp4V2PeerLastErrorReceivedText
1.3.6.1.4.1.30065.4.1.1.3.1.4(7,0)
#portTestResultNotification
1.3.6.1.4.1.4998.1.1.10.1.0.14 0x048a000d 1.3.6.1.4.1.4998.1.1.10.1.1.2(1,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.3(2,0)\\
1.3.6.1.4.1.4998.1.1.10.1.2.1(3,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.98(4,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.99(5,0)\\
1.3.6.1.4.1.4998.1.1.10.1.5.4.1.5(6,7)\\
1.3.6.1.4.1.4998.1.1.10.1.5.4.1.12(8,0)\\
1.3.6.1.4.1.4998.1.1.10.1.5.4.1.13(9,0)\\
1.3.6.1.4.1.4998.1.1.10.1.5.4.1.14(10,0)
# BigIp
#diskVolumeUsageNotification
1.3.6.1.4.1.4998.1.1.10.1.0.17 0x048a000e 1.3.6.1.4.1.4998.1.1.10.1.1.2(1,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.3(2,0)\\
1.3.6.1.4.1.4998.1.1.10.1.2.1(3,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.98(4,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.100(5,0)\\
1.3.6.1.4.1.4998.1.1.10.1.1.101(6,0)\\
1.3.6.1.4.1.4998.1.1.10.1.4.4.1.7(7,8)\\
1.3.6.1.4.1.4998.1.1.10.1.4.4.1.5(9,0)
1.3.6.1.4.1.30065.3.8.1.0.1 0x06710004 1.3.6.1.4.1.30065.3.8.0.0.3.1.3(1,2)\\
# aristaRedundancyLastSwOverReason
1.3.6.1.4.1.30065.3.8.0.0.4(3,0)
# wlsrStaImpersonation wlsrNodeMac
1.3.6.1.4.1.14823.2.3.1.1.100.6.1002 0x05f7000f 1.3.6.1.4.1.14823.2.3.1.1.100.100.5(1,0)\\
# wlsrLocation
1.3.6.1.4.1.14823.2.3.1.1.1.1.1.20(2,3)
';
my $regex = qr/(?m)^\#[^\S\r\n]*(\S+).*\s+^(?!\#)[^\S\r\n]*(\S+)/p;
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