re = /(?<=[\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\.\,\!\?\"\;\:]|$)/m
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\''
# Print the match result
str.scan(re) do |match|
puts match.to_s
end
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 Ruby, please visit: http://ruby-doc.org/core-2.2.0/Regexp.html