For your immediate purpose, str_replace is pefectly adequate because smileys are case-sensitive anyway - 😃 is a different smiley from :d - what's that last one mean? A fat lip?
There ought to be plenty of tutorials on the subject of regular experessions, especially those of the preg_* variety (a Google search on "Perl regular expression tutorial" might turn something up - Perl, 'cos that's where this regexp syntax was developed).
Something else that gives str_replace (and preg_replace) an advantage over ereg_replace is that the other two can take arrays and search/replace on all of their elements concurrently. With ereg_replace you'd need to write a loop to go through the array yourself.