probleme regexp

Eléphanteau du PHP | 25 Messages

04 janv. 2009, 00:42

Salut
voici mon ptit prob:
j'ouvre un fichier texte puis je lis ligne à ligne pour trouver celles qui se termine par gh

Code : Tout sélectionner

while ($ligne=fgets($fp)) { if (preg_match("gh$", $ligne)) echo "<br>:".$ligne; }
ainsi j'utilise la regexp Mais ça ne marche pas. par contre si je vire le dollar ça me trouve bien les lignes comportant gh mais avec le $ plus rien
auriez-vous une idée svp?

Eléphant du PHP | 170 Messages

04 janv. 2009, 01:17

Bonsoir,

le motif de ton expression régulière doit être encadré par des délimiteurs.

Par exemple :
preg_match("/gh$/", $ligne)
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

Eléphanteau du PHP | 25 Messages

04 janv. 2009, 01:35

salut.
je me suis trompé en postant.
je tentais à l'origine d'utiliser ereg:

Code : Tout sélectionner

while ($ligne=fgets($fp)) { if (ereg("gh$", $ligne)) echo "<br>:".$ligne; }
et là ça ne fonctionne pas.
en revanche tu as raison, ta correction fonctionne.
cela dit je n'y arrive pas avec ereg

Eléphant du PHP | 170 Messages

04 janv. 2009, 01:54

On ne devrait plus utiliser les fonctions POSIX ( ereg(), ereg_replace() ... )
( http://lumadis.be/regex/tuto_pcre.php )

Mais ça ne répond pas à ta question.

Il n'y a aucune raison que ça fonctionne avec un preg_match() et pas avec un ereg().

Tu confirmes que ça fonctionne avec un preg_match() et pas avec un ereg() ?

Eléphanteau du PHP | 25 Messages

04 janv. 2009, 01:58

je peux te confirmer que

Code : Tout sélectionner

if (preg_match("/ [0-9]*$/", $ligne, $res))
ça marche
mais que

Code : Tout sélectionner

if (ereg("/ [0-9]*$/", $ligne, $res))
ça marche pas
je viens de tester

-edit-

Code : Tout sélectionner

if (ereg(" [0-9]*$", $ligne, $res))
(sans delimiteurs) marche pas non plus
Modifié en dernier par x-ben le 04 janv. 2009, 02:01, modifié 1 fois.

Eléphant du PHP | 170 Messages

04 janv. 2009, 02:01

avec ereg() il ne faut pas de délimiteurs.

Eléphanteau du PHP | 25 Messages

04 janv. 2009, 02:02

j'ai édité en mème temps que ton post :wink:

Eléphant du PHP | 170 Messages

04 janv. 2009, 02:15

if (ereg(" [0-9]*$", $ligne) !== FALSE)
( peut-être )

Mais on perd son temps avec une fonction qui ne devrait plus être utilisée ...

Eléphanteau du PHP | 25 Messages

04 janv. 2009, 02:19

non le != false ne sert à rien (d'autre requetes à base de ereg fonctionnent sans ça). c'est juste le $ qui me pose problème.
Mais en effet on perd son temps vue que ça marche mieux avec preg_match :wink:
Je te remercie pour le lien très interessant.
A+

ViPHP
AB
ViPHP | 5818 Messages

05 janv. 2009, 20:08

Mais en effet on perd son temps vue que ça marche mieux avec preg_match :wink:
A+
Oui, c'est bien un exemple où y'a pas photo : ne pas utiliser POSIX mais utiliser PCRE pour tout traitement php, vu la différence de performance y'a pas débat.

Pour un usage courant, il n'y a que pour mysql et REGEXP qu'il est utile de se souvenir de la syntaxe POSIX

Sinon le topic est résolu ? Si oui y'a un bouton pour ça :wink:

Eléphanteau du PHP | 25 Messages

11 janv. 2009, 00:59

Sinon le topic est résolu ? Si oui y'a un bouton pour ça :wink:
c'est fait.
merci encore aux intervenants :wink: