Hola!
Me parece que lo que conseguido arreglar dejándolo asi:
Código PHP:
preg_match_all('/<area href="pagina.php\\?s=([0-9]*?)&p=([[:alnum:]]*?)"[^>]*>/i', $contents, $valores);
Lo que no entiendo es por que ahora encuentra todas y antes solo la primera... esto lo vi en un código similar probé y demás, pero bueno si podeis explicar el por que mucho mejor : ).
Saludos.