Non. Le U est pour "Ungreedy", ou encore, pour NonAvare.
Le truc avec quelque chose comme .+, c'est qu'il est avare: il ne vas pas s'arrêter a la première occasion,
mais à la dernière.
Donc si tu fais:
Et que tu as le malheur d'avoir plusieurs .php dans ton fichier, il va te prendre depuis le début de la première occurrence jusqu'à la fin du dernier.
Il y a des raison fortement techniques, mais je les épargne juste maintenant.
En spécifiant le U, tu le rends non-avare.
Une meilleure façon de faire, puisque ce que tu cherches a capturer c'est "tout jusqu'au prochain .php", et donc en plus mieux dit, jusqu'au prochain point (.).
Tu peux donc laisser ton expression tout ce qui n'est pas un point:
Et il va s'arrêter au premier point.
Un autre avantage sur la première solution, est qu'elle est plus rapide. Il me semble me souvenir que dans le premier cas, regex commence en fait sa recherche a partir de la fin du fichier, et vient progressivement en arrière jusqu'à ce qu'il rencontre quelques chose qui valide l'expression.
dans ce deuxième cas, il commence la ou on l'a laissé, et avance jusqu'à valider l'expression.
Si le contenu à traiter est un tant soit peu long, la seconde solution est bien plus rapide.
Donc, ma proposition à 3 francs:
$page = preg_replace('#functions\.[^\.]+\.php#', 'http://www.fr.php.net/manual/fr/functions.$1.php', $page);
$page = preg_replace('#language\.[^\.]+\.php#', 'http://www.fr.php.net/manual/fr/language.$1.php', $page);
$page = preg_replace('#ini\.[^\.]+\.php#', 'http://www.fr.php.net/manual/fr/ini.$1.php', $page);
Ca marche bien sur que si il n'y a pas de point dans ce que tu souhaites capturer...