use strict;
my $str = 'This regex matches any three letter string that has at least one vowel and at least one consonant. As you can see, it\'s very effective and it only matches 3 letter words.
The word "I\'ll" should count as a 3 letter word. Words like "isn\'t," "you\'dn\'t\'ve," and "let\'s" shouldn\'t. Jo\'s dog is smart. The quick brown dog jumped over the lazy fox.
The qis\' house. "qis\'" is just a made up word to test stuff like "kids\'" but for 3 letters.
asd
\'asd
a\'sd
as\'d
asd\'';
my $regex = qr/(?<=[\s\.\,\!\?\"\;\:]|^)(?=[A-Za-z']*?[bcdfghj-np-tvwxyzBCDFGHJ-NP-TVWXYZ])(?=[A-Za-z']*?[aeiouyAEIOUY'])(?:[A-Za-z](?:'?[A-Za-z]){2}|(?:'?[A-Za-z]){2}[A-Za-z])\b'?(?=[\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