in reply to finding nonword character at end of strings

First, you shouldn't use all that alternation, it's much slower (and harder to read) than a character class. Second, you want to have a so called zero width negative lookahead. You want to make sure that what follows doesn't match some regular expression. Third, don't use \1 in the replacement, use $1.
$f =~ s/\s([iaeouyE]):(?!\S)/ $1/;
Replace a whitespace, a vowel, and a colon, not followed by something that isn't whitespace, with a space and said vowel. Alternatively, if you know the first whitespace is always a space (or if you just want to keep whatever whitespace it was), you could use a zero width positive lookbehind:
$f =~ s/(?<=\s[iaeouyE]):(?!\S)//;
The (?<= ) construct is the lookbehind. There's more about lookaheads and lookbehinds in the perlre manual page.

-- Abigail