The regex looks for any <img> tag and extracts anything inside of the "src" attribute. The ".*?" means any character (non-greedy). Non-greedy meaning that (in our case) when we get to a ".jpg", that should not be added as part of the match, but rather marks the end of it. And then we allow any text character (once again, non-greedy) until the closing of the <img> tag. The modifier "i" means that it's case insensitive, so it would match
<img src="">
<IMG src="">
<IMG SRC="">
Or any variation upon that.
The preg_match_all function is easier to use than eregi, sometimes faster, and much more powerful. It uses PERL as it's base for the Regular Expression (Perl RegEx). You can have a more intricate regex, and get faster results.
When the array comes back, it comes back with array[0][1] being filled with the entire matching text (so all the <img> tags that were matched in one string) and array[1][n] (where "n" is a number between 0 and the number of matches) contains each individual match (so each url in the src attribute).
Hope that helps explain the stuff. And as for learning regex, this tutorial is a good one, I used it a lot when learning. I also would use it, post here, and have Weedpacket or someone show me a better way (hence the non-greedy stuff). So it just takes time and practice.