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 :

remplacement dans une longue longue chaine [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut remplacement dans une longue longue chaine
    Bonjour,

    J'essaie de remplacer des "tags" d'une chaine par des champs de formulaire.
    La chaine est assez longue, par contre, tous les tags sont formés de la même manière. A savoir :
    [nomduchamp:typedechamp:valeurduchamp]

    La valeur du champ peut varier. On peut très bien avoir ça pour un champ vide :
    [champx:text:]

    ou pour un champ de type select :
    [champx:select:val1/val2/val3] si aucune valeur sélectionnée,
    sinon [champx:select:val1/val2*/val3] si val2 est sélectionnée

    A la limite, ça je m'en fou un peu pcq si c'est un select, du moment que j'arrive à récupérer ce qui se trouve entre les [:], après je peux traiter pour faire ce que je veux.

    Par contre je ne m'en sors pas avec la regexp. Il faut que je remplace
    [champ1:text:] par <input type="text" name="champ1" id="champ1" value="">

    Avez-vous une idée de comment cette expression régulière ? Voilà 1h que je me casse la tête sans vraiment arriver à quoi que ce soit :s

    Merci d'avance pour votre aide.

  2. #2
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Essaie ce code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $str = preg_replace('/\[([a-z0-9_]+):([a-z]+):([^]]*)\]/i', '<input type="$2" name="$1" id="$1" value="$3">', $str);

  3. #3
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    ah lol. je venais justement dire que j'avais enfin trouver la soluce :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo preg_replace('/\[(.*):(.*):(.*)\]/', '<input id="$1" name="$1" type="$2" value="$3" />', $string);
    Par contre, comment puis-je mettre une condition pour le type de champ ?
    Si par exemple [champx:select:val1/val2/val3] doit être un select, est-il possible d'effectuer des traitement avant de modifier la chaine ?

    Le but est de vérifier la deuxième valeur et si elle est égale à text je fais mon input normal, si elle est égale à select, je mets mon select et je récupère la troisième valeur pour créer mes options ?

  4. #4
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    function get_HTML($matches){
    	$attr =trim($matches[1]);
    	$type =strtolower(trim($matches[2]));
    	$value=trim($matches[3]);
    	if($type=='select'){
    		$s="<select>\n";
    		$a=explode('/',$value);
    		foreach($a as $v){
    			$v=trim($v);
    			if($v!=''){
    				$selected=(substr($v,-1)=='*');
    				if($selected)$v=substr($v,0,-1);
    				$s.='<option value="'.$v.'"'.($selected?' selected="selected"':'').'>'.$v."</option>\n";
    			}
    		}
    		$s.="</select>\n";
    	}else
    		$s='<input type="'.$type.'" name="'.$attr.'" id="'.$attr.'" value="'.$value."\">\n";
    	return $s;
    }
     
    $str=preg_replace_callback(
    	'/\[([a-z0-9_]+):([a-z]+):([^]]*)\]/i',
    	'get_HTML',
    	$str
    );
    ?>

  5. #5
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    wooowwww. Si je m'attendais à ça. Je vais tester ce bout de code tantôt.

    Merci. Je vois le principe

  6. #6
    Membre éclairé
    Profil pro
    Expert technique
    Inscrit en
    Septembre 2003
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert technique

    Informations forums :
    Inscription : Septembre 2003
    Messages : 328
    Par défaut
    impeccable ce code !!!

    J'ai juste dû changer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $str=preg_replace_callback(
    	'/\[([a-z0-9_]+):([a-z]+):([^]]*)\]/i',
    	'get_HTML',
    	$str
    );
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $str=preg_replace_callback(
    	'/\[([a-z0-9_]+):([a-z]+):([^]]*)\]/i',
    	array($this,'get_HTML'),
    	$str
    );
    niiicceeeeee. Merci

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

Discussions similaires

  1. Pb de remplacement dans une chaine
    Par lilli1407 dans le forum SQL
    Réponses: 1
    Dernier message: 11/04/2008, 11h15
  2. Replace - remplacement dans une chaine
    Par petiteso dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 28/06/2007, 11h14
  3. [RegEx] Remplacement dans une chaine avec PHP, possible ou impossible ?
    Par mf412 dans le forum Langage
    Réponses: 1
    Dernier message: 10/05/2007, 13h40
  4. Réponses: 2
    Dernier message: 05/01/2006, 13h15
  5. Remplacer dans une chaine de caractères à partir de la fin
    Par daddyel dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/01/2006, 11h31

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