これってPHP4.3.4のバグでしょうか?
$a = 'aaajpgaaa';
echo preg_match( '/[a-z]+(?:jpg|gif)/', $a ); // 1
echo preg_match( '|[a-z]+(?:jpg\|gif)|', $a ); // 0

/regexp/ じゃなくて |regexp| にしてるのが問題みたいですが…
もしかして、/ 以外は使えませんか?