Read Jeff Friedl's "Mastering Regular Expressions" book.
As written:
<a\s*href=['|"](http:\/\/(.*?)\S['|"]>
You have unbalanced parentheses in the expression. Maybe the trouble is that the first match is being treated as "read to end of regex". Also, why would you not want the last non-space character of the URL?
The .*? (lazy greedy) operator is interesting. I must say, though, that I'd be more inclined to write:
<a\s+href=['|"]http://([^'"><]+)\1>
This distinguishes between "<ahref" (a non-existent HTML tag) and "<a href" (a valid HTML tag). It doesn't capture the 'http://' prefix. I'm not certain whether you have to escape the slashes -- in Perl, where I mainly work, I wouldn't need to. The capturing part uses the greedy match, but only on characters that might semi-legitimately appear in the URL. Specifically, it excludes both quotes and the end-tag (and, for good measure, the begin-tag too). If you really want the 'http://' prefix, shift the capturing parenthesis appropriately.