IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

PB délimiteur dans la fonction "preg_replace" [RegEx]


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 35
    Points
    35
    Par défaut PB délimiteur dans la fonction "preg_replace"
    Boujour,

    J'ai un fichier qui est contenue dans une chaine de caractere sur laquel j'utilise la fonction "preg_replace(mixed pattern, mixed replacement, mixed subject)"

    Le probleme est que "mixed pattern" doit etre une expression reguliere, c'est pour cela que je rajoute "#" avant et apres mais le probleme c que le pattern et le replacement contienne eux aussi un caractere que preg_replace consdidere comme des délimiteurs : "_" et qui sont en plein millieu de mon pattern et replacement!


    Alors comment me debrouillez pour que les "_" ne soit pas considerer comme des délimiteur?

    Sachant que jai essayer en mettant un anti slash devans ca n'a rien changer! Il ne me modifie toujours que la premiere partie de la chaine (celle qui est avant le premier "_"!


    Merci pour vos futures reponses!

  2. #2
    Membre expert
    Inscrit en
    Janvier 2005
    Messages
    2 291
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 291
    Points : 3 212
    Points
    3 212
    Par défaut
    on peut avoir le code correspondant s'il te plait?
    Parce qu'il me semble que le but du premier et du dernier caractère dans le pattern est d'être le délimiteur (non présent dans la chaine donc).

  3. #3
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Ton pattern (et uniquement le pattern) est une regex de type PCRE ok.
    La grande différence entre preg et ereg c'est qu'il y a des délimiteurs dans le premier.
    Ces délimiteurs sont là pour séparer la partie expression régulière des options (aussi appelés flags) qui vont être utilisés avec elle.

    Assez couramment, on utilise le délimiteur # ou ` car ce sont des caractères assez rarement utilisés mais presque nimporte quel caractère peut servir de délimiteur.

    Attention toutefois à ce que le caractère qui est utilisé pour délimiteur (prennons pour exemple le #) ne soit pas déja présent DANS la regex (comme par exemple (#<a style="color: #fff">#) car ici le moteur de regex ne comprendrai plus.

    Il n'y a pas de délimiteur pré determiné, il y a des méta caractères comme le ., le \, les () et les [] (pour ne citer qu'eux).

    Si dans votre regex vous utilisez du texte dont vous ne pouvez pas controler le contenu, utilisez comme délimiteurs un métacaractère et veillez à utiliser preg_quote sur le texte que vous ne controlez pas avant de l'integrer à votre regex. Bien evidemment, si vous meme ajoutez des caractères à dans votre regex, veillez à échapper les métacaractères (pour qu'ils ne soient pas pris comme délimiteurs).

    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Variable dont je ne controle pas le contenu (elle pourrais provenir de $_GET par exemple)
    $regex = "I love my root."; // Remarquez le . à la fin qui pourrait géner
     
    $texte = "Yes I think I love my root."; 
     
    preg_match('(.*'.preg_quote($regex).'.*)');

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Mai 2007
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 33
    Points : 35
    Points
    35
    Par défaut
    J'utilise preg_replace car il est capable de comprendre les tableaux, ce qui n'est pas le cas de ereg, que j'utilisais avant en réalisant un boucle sur les éléments du tableaux, mais ereg est trop lent et il m'arrivait de dépasser les 30s de temps d'exécution, c'est pour cela que je veut absolument utilisé preg!

    Sinon j'avais cité comme exemple de délimiteur # mais ça aurait pu être n'importe quel autre délimiteur, ici j'ai utilisé "/"



    Voila pour le code de remplissage des tableaux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    foreach($listeElement as $element)
    {
    	$e=$element->getAttribute("id");
    //essai ne marchant pas   :  $e=ereg_replace('_','\_',$e);
    	$tab_e[$ligneXml] = ($id_film.'_'.$ligneXml);
    	$tab_e_indice[$ligneXml] = '/'.$e.'/';
     
    	$ligneXml++;
    }
    Sachant que $e est du type (inchangeable) "elD_22_2" par exemple!

    Et voila pour l'utilisation :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine_xml=preg_replace($tab_e_indice,$tab_e,$chaine_xml);



    edit : soluces trouvé sur php.net :

    J'ai utilisé une autre fonction au final :

    J'ai commencé par creer mon tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $temp=array_combine($tab_img_indice,$tab_img);
    Puis jai tout remplacé avec la fonction strtr, qui elle ne prend pas en compte les expression reguliere! :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $chaine=strtr($chaine,$temp);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fonction "get.hist.quote" dans {tseries}..
    Par Jack_dev dans le forum R
    Réponses: 1
    Dernier message: 24/11/2014, 12h57
  2. Passage d'un String PHP dans fonction javascript et quotes
    Par roukgreg dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/05/2013, 14h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo