OVH Cloud OVH Cloud

Expressions Regulieres

1 réponse
Avatar
Yannick
Bonjour

je voudrais faire une recherche avec une expression régulière
mais je voudrais pouvoir exclure une chaine de caractère de la
recherche.

$match = eregi("<h5>Titre</h5></td>([^table]+)</tr>", $texte, $regs);

je veux exclure table de la recherche, sinon, il me récupère un
résultat trop grand (va jusqu'au dernier </tr> dans la fichier).

mais là, dès qu'il trouve t ou a ou b ou .... l'expression n'est
pas récupérée.

merci d'avance pour votre aide

Yannick

--
Yannick

1 réponse

Avatar
Olivier Miakinen

je voudrais faire une recherche avec une expression régulière
mais je voudrais pouvoir exclure une chaine de caractère de la
recherche.

$match = eregi("<h5>Titre</h5></td>([^table]+)</tr>", $texte, $regs);

je veux exclure table de la recherche, sinon, il me récupère un
résultat trop grand (va jusqu'au dernier </tr> dans la fichier).

mais là, dès qu'il trouve t ou a ou b ou .... l'expression n'est
pas récupérée.


<coup de gueule>
Il faudrait qu'un jour PHP supprime les expressions POSIX de la version
livrée par défaut ; seuls les masochistes, les nostalgiques et les
possesseurs de vieux scripts difficilement modifiables prendraient la
peine de les recompiler.
</>

On ne le dira jamais assez : utiliser les expressions rationnelles
compatibles PERL plutôt que celles de POSIX ! C'est même écrit en tout
premier sur la page <http://fr2.php.net/manual/fr/ref.regex.php> :

-------------------- CITATION DU MANUEL ------------------------------
Astuce : PHP supporte aussi des expressions rationnelles compatibles
Perl, avec l'extension PCRE functions. Ces fonctions supportent des
recherches non-gourmandes, des assertions, des sous-masques
conditionnels et toute une gamme de fonctionnalités absentes des
expressions rationnelles POSIX.
-------------------- CITATION DU MANUEL ------------------------------

Donc : <http://fr2.php.net/manual/fr/ref.pcre.php>.

Ce que tu ne sais pas faire avec eregXXX se fait de plein de manières
différentes avec pregYYY. Si vraiment tu veux tous les <td> qui suivent
dans la même table, tu peux utiliser les assertions, ou bien la fonction
preg_replace_callback() que je conseillais il y a quelques heures à
CrazyCat. Mais si tu ne veux qu'un seul <td>, il suffit de limiter la
gourmandise des expressions avec un simple « U » comme je l'ai conseillé
à CrazyCat dans ma dernière réponse.

En résumé : <http://fr2.php.net/manual/fr/ref.pcre.php>.
(Je l'ai déjà dit, non ?)

--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)