Page 1 sur 1

ereg_replace -> Preg_replace [résolu]

Posté : 06 mai 2010, 21:23
par leiopar
Bonjour :)

Comme beaucoup, je suis confronté a un "Function ereg_replace() is deprecated"... :?

J'ai donc entrepris de passé à la commende "preg_replace()".

Problème : je bute sur le remplacement de ces commande là :

Code : Tout sélectionner

if ($log){ $page=ereg_replace("\[#si_log#\](.*)\[#/si_log#\]",ereg_replace('(^.*\[#si_log#\])|(\[#/si_log#\].*$)','', $page),$page); }else{ $page = ereg_replace("\[#si_log#\](.*)\[#/si_log#\]","",$page); }
sachant que "$page" est un truc du genre :
titre [#si_log#]vous êtes connecté [#/si_log#]suite...
le but du jeu étant de faire d'afficher
"titre vous êtes connecté suite..."
si $log est vrai et
"titre suite..."
dans le cas contraire.

mais là, je n'y arrive plus ! :cry:
S'il vous plait un coup de mains serait bien venu !!!

Je précise que le code avec les "ereg_remplace" est tout à fait fonctionnel...

Leiopar

Re: ereg_replace -> Preg_replace

Posté : 06 mai 2010, 23:00
par stealth35
hello,
a part les délimiteur en plus y'a pas grand chose qu'a changer, je te conseil se petit site pour tester tes masques
http://gskinner.com/RegExr/

:wink:

Re: ereg_replace -> Preg_replace

Posté : 31 déc. 2011, 22:58
par leiopar
1 an et demi après.... UP ! :(

Je n'ai pas trop su quoi faire du lien de stealth35.
Cet outil semble fait pour étudier l’expression elle même.
Le problème n'est pas là (mon expression, je le rappel, fonctionne actuelement en production)

Mon souci est que je ne sais pas comment remplacer "ereg_replace" par "Preg_replace"

Sinon, bonne année a tous ;)

Re: ereg_replace -> Preg_replace

Posté : 31 déc. 2011, 23:33
par Calimero
Salut,

Si tu ne sais pas remplacer, alors ne remplace pas, refais-les directement en syntaxe preg.

L'apprentissage des regexp perl te prendra moins d'un an et demi ;-)

Potasse bien le manuel et les nombreux exemples : http://fr.php.net/manual/fr/book.pcre.php

Et bon /réveillon/ :)

Re: ereg_replace -> Preg_replace

Posté : 03 janv. 2012, 20:38
par leiopar
ok...

on va y aller petit bout par petit bout.

Si j'isole :
preg_replace('(^.*\[#si_log#\])|(\[#/si_log#\].*$)','', $page)
dont le rôle et de sélectionner tout ce qui précède la balise [#si_log#] et qui suit [#/si_log#] balise compris, sachant que l'expression (^.*\[#si_log#\])|(\[#/si_log#\].*$) fonctionne dans l'outil "RegExr" proposé si dessus, jobtien l'erreur suivante :
Warning: preg_replace() [function.preg-replace]: Unknown modifier '|' in ...
De même, si j'isole :
$page = preg_replace("\[#si_log#\](.*)\[#/si_log#\]","",$page);
j'obtiens :
Warning: preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in ...
Des suggestion ?

Re: ereg_replace -> Preg_replace

Posté : 03 janv. 2012, 20:39
par xTG
les prce nécessitent des délimiteurs.
Là tu n'en as pas dans ton expression.
Donc de base il prend la première parenthèse comme délimiteur.
Sauf que du coup comme tu la fermes bah il tombe sur un caillou à savoir le |

Re: ereg_replace -> Preg_replace

Posté : 03 janv. 2012, 20:55
par leiopar
pourtant il i à des apostrophe... ou alors j'ai mal compris.

Re: ereg_replace -> Preg_replace

Posté : 03 janv. 2012, 21:55
par xTG
Non tes apostrophes c'est juste pour dire à PHP que c'est une chaîne de caractère...
Voilà ton expression actuelle : (^.*\[#si_log#\])|(\[#/si_log#\].*$)
Faut rajouter un délimiteur à cette expression.

Re: ereg_replace -> Preg_replace

Posté : 03 janv. 2012, 22:37
par leiopar
merci !

La bonne réponse est donc :
if ($log){
	$page=preg_replace('(\[#si_log#\](.*)\[#/si_log#\])',preg_replace('((^.*\[#si_log#\])|(\[#/si_log#\].*$))','', $page),$page);
}else{
	$page = preg_replace('(\[#si_log#\](.*)\[#/si_log#\])',"",$page);
}

Re: ereg_replace -> Preg_replace

Posté : 04 janv. 2012, 00:02
par Calimero
Message subliminal :
Potasse bien le manuel et les nombreux exemples : http://fr.php.net/manual/fr/book.pcre.php

Et bon /réveillon/ :)
Les délimiteurs sont deux caractères identiques en début et en fin de motif. Après le délimiteur de fin, on trouve souvent des modifieurs (des caractères ne faisant pas partie du motif, mais ayant une signification particulière), voir le manuel pour comprendre leur signification.