ereg_replace -> Preg_replace [résolu]

Eléphanteau du PHP | 20 Messages

06 mai 2010, 21:23

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
Modifié en dernier par leiopar le 03 janv. 2012, 22:38, modifié 1 fois.

ViPHP
ViPHP | 5462 Messages

06 mai 2010, 23:00

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:

Eléphanteau du PHP | 20 Messages

31 déc. 2011, 22:58

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 ;)

ViPHP
ViPHP | 2287 Messages

31 déc. 2011, 23:33

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/ :)
if(!@work()){ Nespresso(); } else { what(); }
______________________________

Eléphanteau du PHP | 20 Messages

03 janv. 2012, 20:38

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 ?
Modifié en dernier par leiopar le 03 janv. 2012, 20:49, modifié 1 fois.

ViPHP
xTG
ViPHP | 7331 Messages

03 janv. 2012, 20:39

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 |

Eléphanteau du PHP | 20 Messages

03 janv. 2012, 20:55

pourtant il i à des apostrophe... ou alors j'ai mal compris.

ViPHP
xTG
ViPHP | 7331 Messages

03 janv. 2012, 21:55

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.

Eléphanteau du PHP | 20 Messages

03 janv. 2012, 22:37

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);
}

ViPHP
ViPHP | 2287 Messages

04 janv. 2012, 00:02

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.
if(!@work()){ Nespresso(); } else { what(); }
______________________________