eregとpregのようにphpでは最初に「p」がついたperl互換の正規表現の関数があります。
どちらを使うかということでなやむことがありますが、できればどちらかに統一するほうがいいとおもいます。
PHP独自のereg系とPerl互換のpreg系では、たとえば、「Perl 互換の正規表現構文を使用する preg_match() のほうが、多くの場合 ereg() よりも速く動作します。」というような情報もあります。
日本語を使う場合は、「mb_」の付いたmb_eregなどを使いがちですが、「上」や「一」といった漢字がスルーされてしまうそうです。
PCRE のバージョンに依存しますが「preg系の正規表現にパターン修飾子「u」を指定すると、パターン文字列がUTF-8でエンコードされた文字列として扱われるようになります。」ということで、
preg_match_all('/[a-zA-Z0-9]/u', $str, $matches);
という使い方がいいでしょう。