Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1521 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  regexp

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

regexp

n°1833492
x-ben
Posté le 03-01-2009 à 23:23:23  profilanswer
 

Salut.
je bloque sur un truc tout con.
j'ouvre un fichier texte en php puis avec une expression regulière je cherche les lignes qui se terminent par le motif gh.
 

Code :
  1. while ($ligne=fgets($fp))
  2. {
  3.  if (ereg("gh$", $ligne))
  4.  echo "<br>:".$ligne;
  5. }


 
sauf que ce truc tout con ne marche pas.
si j'enlève le $ il me donne bien les lignes qui comportent gh mais si je le met il ne me trouve rien alors qu'il y en a.
 
ça peut venir de quoi svp  :cry:

mood
Publicité
Posté le 03-01-2009 à 23:23:23  profilanswer
 

n°1833493
sielfried
Posté le 03-01-2009 à 23:30:02  profilanswer
 

Code :
  1. function ends_with_gh($string) {
  2.   return strrpos($string, 'gh') == strlen($string) - 1;
  3. }
  4. $lines_ending_with_gh = array_filter(file($path), 'ends_with_gh');
 

(Non testé.)

 

Edit: mon truc te crée un tableau. Si t'as juste besoin d'itérer une fois, prend juste en compte la fonction. En regex, ça donnerait /gh$/ avec preg_match (je connais pas ereg). Mais en termes de perfs je suppose qu'il est préférable de se passer des regexp quand c'est possible.


Message édité par sielfried le 04-01-2009 à 14:46:26

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1833494
x-ben
Posté le 03-01-2009 à 23:36:10  profilanswer
 

cool mais ça va aller car.
le fait que ça termine par gh n'est qu'un tout petit bout de ce que je dois intégrer dans ma regexp
mais là je bloque sur l'utilisation du $ qui correspond normallement à fin de ligne.
merci à toi néanmoins  :jap:

 

-edit- il faut nécessairement que j'utilise les regexp et j'itere sur un tas de lignes d'un fichier texte


Message édité par x-ben le 03-01-2009 à 23:37:11
n°1833495
sielfried
Posté le 03-01-2009 à 23:42:01  profilanswer
 

Utilise preg_match avec /gh$/. ereg est fortement déconseillée.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1833497
x-ben
Posté le 03-01-2009 à 23:48:03  profilanswer
 

sielfried a écrit :

Utilise preg_match avec /gh$/. ereg est fortement déconseillée.


ok ça marche.
merci beaucoup  ;)  
tu n'aurais pas idée de la raison pour laquelle ça ne marche pas avec ereg? (alors qu'à priori ça devrait)

n°1833498
x-ben
Posté le 03-01-2009 à 23:58:40  profilanswer
 

bon en vérité ça se complique un peu.
ma question était pour parvenir à isoler un nombre se trouvant en fin de ligne genre:
10- - [0000] ".php blabla.0" test 123
23- - [123] "blabal " test2 25
 
je veux récupérer 123 et 25 (pour en faire la somme en l'occurence).

n°1833501
sielfried
Posté le 04-01-2009 à 00:20:20  profilanswer
 

/\d+$/
 
Ou /(?<=\s+)\d+$/ s'il doit y avoir un espace avant.


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1833503
x-ben
Posté le 04-01-2009 à 00:32:26  profilanswer
 

je ne pige pas ta syntaxe.
en attendant j'ai fais ça: / [0-9]*$/  (il y a un espace entre / et [ )et ça semble fonctionner

n°1833504
sielfried
Posté le 04-01-2009 à 00:35:28  profilanswer
 

\d c'est pareil que [0-9].

 

+ c'est mieux que * dans ton cas, tu veux au moins un chiffre.

 

\s c'est n'importe quel espace (ça peut être une tabulation aussi par exemple), \s+ c'est donc n'importe quelle suite de caractères d'espacement, ça permet d'être tranquille là-dessus, après ça dépend si ton format est strict ou pas.

 

Enfin, encadrer de (?<=) l'espace permet de ne pas l'inclure dans le résultat du match. Ton truc va matcher le nombre avec l'espace avant, alors que ma version ne matchera que le nombre.


Message édité par sielfried le 04-01-2009 à 00:36:13

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1833506
x-ben
Posté le 04-01-2009 à 00:49:31  profilanswer
 

j'ai testé tes 2 versions
la 1ere c'est ok je trouve le mème resultat que moi
par contre la 2eme il doit y a voir une boulette
 
if (preg_match(/(?<=\s+)\d+$/", $ligne, $res))
->
Parse error: syntax error, unexpected '/', expecting ')' in /var/www/regexp.php on line 53
 
j'ai corrigé comme ça:
 
if (preg_match("/(?<=\s+)\d+$/", $ligne, $res))
->
Warning: preg_match() [function.preg-match]: Compilation failed: lookbehind assertion is not fixed length at offset 7 in /var/www/regexp.php on line 53
 
en attendant je te remercie pour les ptits trucs bien pratique que je viens d'apprendre  [:athome]

Message cité 1 fois
Message édité par x-ben le 04-01-2009 à 00:51:24
mood
Publicité
Posté le 04-01-2009 à 00:49:31  profilanswer
 

n°1833513
sielfried
Posté le 04-01-2009 à 01:43:57  profilanswer
 

x-ben a écrit :

j'ai testé tes 2 versions
la 1ere c'est ok je trouve le mème resultat que moi
par contre la 2eme il doit y a voir une boulette
 
if (preg_match(/(?<=\s+)\d+$/", $ligne, $res))
->
Parse error: syntax error, unexpected '/', expecting ')' in /var/www/regexp.php on line 53


 
Ah bah évidemment, si t'ouvres pas la chaîne...
 

Citation :


j'ai corrigé comme ça:
 
if (preg_match("/(?<=\s+)\d+$/", $ligne, $res))
->
Warning: preg_match() [function.preg-match]: Compilation failed: lookbehind assertion is not fixed length at offset 7 in /var/www/regexp.php on line 53
 
en attendant je te remercie pour les ptits trucs bien pratique que je viens d'apprendre  [:athome]


 
Effectivement, je me fais toujours avoir. Bon, bah (?<=\s)\d+$, dans ce cas. Faut qu'il n'y ait qu'un seul caractère d'espacement avant, dans ce cas.
 
Sinon, /\s+(\d+)$/ et tu récupères $res[1].


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1833643
x-ben
Posté le 04-01-2009 à 16:37:47  profilanswer
 

les 2 sont ok  [:the fonz]  
 
merci et dédrap surtout pas  :hello:

n°1836250
x-ben
Posté le 09-01-2009 à 23:50:03  profilanswer
 

Salut,
j'ai un nouveau ptit prob.
il s'agit de traiter de remplacer des balises dans un texte.
 
ex: les regexp c'est *supayr*  
doit devenir: les regexp c'est <b>super</b>
je suis parti dans ce sens:
 

Code :
  1. preg_replace(    '/\*.*\*/'    ,     '/<b>.\*</b>'     , $texte);


le prob est que je perd le texte entre les <b> et </b>
ça va me donner: les regexp c'est <b></b>
 
qqun pour m'aiguiller svp?

n°1836288
sielfried
Posté le 10-01-2009 à 11:21:39  profilanswer
 

http://fr.php.net/manual/fr/function.preg-replace.php
 
Regarde la doc du paramètre 'replacement' et les exemples.  
 
(Il y a autre chose qui ne va pas, mais chaque chose en son temps...)


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
n°1836324
x-ben
Posté le 10-01-2009 à 13:39:15  profilanswer
 

sielfried a écrit :

http://fr.php.net/manual/fr/function.preg-replace.php
 
Regarde la doc du paramètre 'replacement' et les exemples.  
 
(Il y a autre chose qui ne va pas, mais chaque chose en son temps...)


 
je l'ai lu dans tout les sens celle là ;)
il y a qq exemples sur lesquels je ne percute pas vraiment mais en attendant je m'en suis sorti comme ça:

Code :
  1. $patterns[0] = '/\$(.+?)\$/';
  2. $replacements[0] = '<i>$1</i>';
  3. $new_texte = preg_replace($patterns, $replacements, $texte);


(je procède par tableau car j'ai d'autres balises à traiter en réalité et ça fait plus propre)
En effet il fallait que je m'attarde sur le paramètre 'replacement'
 
L'autre truc qui n'allait pas dans mon exemple est sans doute l'utilisation de .* au lieu de .+? c'est ça  [:autobot]

n°1836457
Cortexd
Posté le 10-01-2009 à 22:07:13  profilanswer
 

juste pour dire que ton premier problème avec $ venait du fait que la ligne retournée par fgets() contient le retour à la ligne final, il fallait donc mettre "gh\n$" ou faire un rtrim() avant

n°1836462
x-ben
Posté le 10-01-2009 à 23:06:33  profilanswer
 

Cortexd a écrit :

juste pour dire que ton premier problème avec $ venait du fait que la ligne retournée par fgets() contient le retour à la ligne final, il fallait donc mettre "gh\n$" ou faire un rtrim() avant


ah ok.
mais pkoi on n'a pas le problème avec preg match alors [:at war with emo]


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  regexp

 

Sujets relatifs
Capturer clavier et modifier avec des regexp ?RegExp JavaScript
Stocker les regexp dans des variables avec qr[Resolu][RegExp] filtre sur code postal
Probablement un problème de regexp....? (extraction d'URL)Regexp de date et email
[ Mysql ] SHOW DATABASES + REGEXP[REGEXP] chaine ne contenant pas une sous-chaîne
[mysql] help pour REGEXPRegexp avec 2 modificateurs
Plus de sujets relatifs à : regexp


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR