note
chipmunk
Here's a solution to start things off. I assume that runs of spaces in the strings have been squashed (<code>tr/ //s;</code>). For this solution, a phrase will appear in the results more than once if it occurs in the first string more than once and the second string at least once.
<code>sub repeated {
my@p;$_=pop()-1 for$m,$n;
$_[1]=~($~=$1.$2)&&push@p,$~while$_[0]=~/(\w+)(?=(( \w+){$n,$m}))/g;
@p
}
</code>
95 characters.
<p>
<B>Update:</B> Shortened with the help of \b:
<code>sub repeated {
my@p;$m=pop;$n=pop;
$_[1]=~$1&&push@p,$&while$_[0]=~/\b(?=((\w+\b ?){$n,$m}))/g;
@p
}
</code>
81 characters.
<p>
<B>Update:</B> Gotta remember to reset the array when using push! Thanks MeowChow! Added 5 characters to each of the above.
<p>
<B>Update:</B> MeowChow was actually pointing out a different problem... my code doesn't properly find phrases with less than the max number of words... I'm going to redo this completely and start a new sub thread when I get a working solution. (Darn you to heck, MeowChow! :D )
79364
79364