use strict;
my $str = 'void rmdt::Worker<T_Channel, T_TransportControl>::setOption(rmdt::SockOpt, int64_t) [with T_Channel = iptransport::udp::Socket; T_TransportControl = rmdt::AggressiveTransportControl; int64_t = long int]
std::error_code rmdt::ReceiveHandler<T_Channel>::internalRunSenderPart(int32_t) [with T_Channel = iptransport::udp::Socket; int32_t = int]
void dex::rmdt::Worker::setOption(rmdt::SockOpt, int64_t)
void Worker::setOption(rmdt::SockOpt, int64_t)
std::pair <HandshakeRequestPayload,int64_t> rmdt::HandshakeAcceptor<T_Channel, T_Val>::receiveHandshake(int)
std::vector<std::__cxx11::basic_string<char> > rmdt::Worker<T_Channel, T_TransportControl>::connect() [with T_Channel = iptransport::udp::Socket; T_TransportControl = rmdt::BQLLP]
dex::type dex::func(int d)
void func(int d)';
my $regex = qr/\s(?:(?:\w+::)*(\w+)(?:<[\w, ]+>){0,1}::){0,1}(\w+)[(]/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