use strict;
my $str = 'Admit to Patient bla bla bla bla
Hello There bla bla bla bla
Get There by Noon bla bla bla bla
Get There By Noon please don\'t be late
Hello for Everyone on Here hope you are doing good
Hello For Everyone On Here hope you are doing good
Admit To Patient should be matched';
my $regex = qr/(?: # Start of group:
\b # Match start of a word
(?: # Start of inner group:
[A-Z][a-z]* # Either match an uppercase word
| # or
(?:a[nts]|the|by|for|i[nt]| # one of these "special" words
o[fnr]|to|up|and|but|nor)
) # End of inner group
\b # Match end of word
\s+ # Match one or more whitespace characters
)+ # Match one or more of the above./xp;
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