use strict;
my $str = '#include <iostream>
#include <iomanip>
#include "Time.h"
using namespace std;
Time :: Time(const int h, const int m, const int s)
: hour(h), minute (m), second(s)
{}
virtual const void Time :: setTime(const int h, const int m, const int s)
{
hour = h;
minute = m;
second = s;
}
std::string Time :: print() const
{
cout << setw(2) << setfill(\'0\') << hour << ":"
<< setw(2) << setfill(\'0\') << minute << ":"
<< setw(2) << setfill(\'0\') << second << "\\n";
}
bool Time :: equals(const Time &otherTime)
{
if(hour == otherTime.hour
&& minute == otherTime.minute
&& second == otherTime.second)
return true;
else
return false;
}';
my $regex = qr/^\s*?((?:virtual\s*|const\s*|friend\s*){0,3})\s*([\w]*?)\s*\w+\s*::\s*([\w]+)\s*(\(.*\))\s*(const)?\s*[{|:]/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