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 :

ne pas toujours remplacer [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut ne pas toujours remplacer
    Bonjour,

    Je cherche à faire un truc un peu particulier, l'explication n'est pas simple alors je vais directement le faire par un exemple.

    Dans un texte, je cherche à remplacer toutes les occurrences de "toto" par "tata". Jusque là rien de bien compliqué, mais c'est sur la suite que je coince. J'aimerai que "toto" ne soit pas remplacé s'il se trouve dans une url ou entre 2 balises <a>.

    Pourquoi ? Parce que mon "toto" quand il n'est pas dans un lien est transformé automatiquement en lien.

    Quelqu'un saurait-il faire ça en expression régulière ?

    ++

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Comme ca je proposerai de leur faire en trois fois:
    1. en premier vous remplacez les toto dans les liens par un "tmpTOTO",
    2. vous remplacez ensuite les toto restant par votre valeur
    3. enfin vous remplacer "tmpTOTO" par toto

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    merci pour ta réponse rapide. C'est effectivement la solution vers laquelle je me destinait : le faire en plusieurs étapes.

    Mais je coince sur le point n°1

    Je n'arrive pas à remplacer "toto" juste dans les liens et surtout quand j'ai un lien du style <a href="http://www.toto.com/toto-est-beau">Toto se trouve beau comme toto</a>

    J'avoue je cherche la merde

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    oups je vous ai tutoyé alors que vous m'avez vouvoyé ! désolé

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Pas de soucis je suis encore jeune (que 31 ans )

    Dans l'exemple
    Pouvez vous mettre en gras ceux à modifier

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    bon on a à peu près le même âge alors

    en fait dans l'exemple, il n'y avait justement aucun "toto" à modifier. Mais voici un meilleur exemple, avec en gras ceux à modifier

    Il était une fois, un jeune garçon nommé Toto <a href="http://www.toto.com/toto-est-beau">Toto se trouve beau comme toto</a> quel sacré toto ce Toto

  7. #7
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 098
    Points
    19 098
    Billets dans le blog
    17
    Par défaut
    Je cherche sur http://www.annuaire-info.com/outil-r...ion-reguliere/ pour trouver la bonne expression

    celui-la est plus pratique:
    http://regexp.zug.fr/

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 18
    Points : 11
    Points
    11
    Par défaut
    bon j'ai bidouillé un truc, je verrai plus tard à l'optimiser car j'ai d'autres trucs sur le feu

    j'en profite pour filer un bout de ce que j'ai mis en place pour mes bbcodes

    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    class Bbcode {
    	var $urls = array(
    		'url' => '/(http:\/\/)?(www.)?((([a-zA-Z0-9-]){2,}\.){1,4}([a-zA-Z]){2,6}(\/([a-zA-Z-_\/\.0-9#:?=&;,]*)?)?)/',
    		'urls' => '/(https:\/\/)(\[ZzZ\])((([a-zA-Z0-9-]){2,}\.){1,4}([a-zA-Z]){2,6}(\/([a-zA-Z-_\/\.0-9#:?=&;,]*)?)?)/'
    	);
     
    	var $bburls = array(
    		'url' => '[ZzZ]\\2\\3[/ZzZ]',
    		'urls' => '[ZzZs]\\3'
    	);
     
    	var $bbcodes = array(
    		'b' => '/(\[[Bb]\])(.+?)(\[\/[Bb]\])/',
    		'i' => '/(\[[Ii]\])(.+?)(\[\/[Ii]\])/',
    		'u' => '/(\[[Uu]\])(.+?)(\[\/[Uu]\])/',
    		's' => '/(\[[Ss]\])(.+?)(\[\/[Ss]\])/',
    		'size' => '/(\[size=)(.+?)(\])(.+?)(\[\/size\])/',
    		'color' => '/(\[color=)(.+?)(\])(.+?)(\[\/color\])/',
    		'link' => '/(\[ZzZ\])(.+?)(\[\/ZzZ\])/',
    		'links' => '/(\[ZzZs\])(.+?)(\[\/ZzZ\])/',
    		'url' => '/(\[url\])(.+?)(\[\/url\])/',
    		'url2' => '/(\[url=)(<a href=")(.+?)(" target="_blank">)(.+?)(<\/a>)(\])(.+?)(\[\/url\])/',
    		'wink' => '/(;\))/',
    		'cry' => '/(:\'\()/',
    		'happy' => '/(:\))/',
    		'sad' => '/(:\()/',
    		'tong' => '/(:p)/',
    		'lol' => '/(:lol:)/',
    		'grin' => '/(:D)/',
    		'toto' => '/(t|T)(oto|OTO)/'
    	);
     
    	var $htmlcodes = array(
    		'b' => '<b>\\2</b>',
    		'i' => '<i>\\2</i>',
    		'u' => '<u>\\2</u>',
    		's' => '<strike>\\2</strike>',
    		'size' => '<font size="\\2">\\4</font>',
    		'color' => '<font color="\\2">\\4</font>',
    		'link' => '<a href="http://\\2" target="_blank">\\2</a>',
    		'links' => '<a href="https://\\2" target="_blank">\\2</a>',
    		'url' => '\\2',
    		'url2' => '<a href="\\3" target="_blank">\\8</a>',
    		'wink' => '<img src="/img/emoticons/wink.gif" title="wink">',
    		'cry' => '<img src="/img/emoticons/cry.png" title="cry">',
    		'happy' => '<img src="/img/emoticons/happy.gif" title="happy">',
    		'sad' => '<img src="/img/emoticons/sad.png" title="sad">',
    		'tongue' => '<img src="/img/emoticons/tongue.gif" title="tongue">',
    		'lol' => '<img src="/img/emoticons/giggle.gif" title="giggle">',
    		'grin' => '<img src="/img/emoticons/grin.gif" title="grin">',
    		'toto' => '<a href="https://www.toto.fr/voir-toto" target="_blank">Toto</a>'
    	);
     
    	function parse($text) {
    		// j'isole les urls en leur donnant un bbcode temporaire du type [ZzZ][/ZzZ]
    		$text = preg_replace($this->urls, $this->bburls, $text);
     
    		$pattern = '/(\[ZzZ)(.+?)(\[\/ZzZ\])/';
    		preg_match_all($pattern, $text, $hyperlink);
    		$pattern ='toto';
    		if ($hyperlink[0]) {
    			$new_url = $hyperlink[1][0].preg_replace($pattern, '[tata]', $hyperlink[2][0]).$hyperlink[3][0];
    			$text = str_replace($hyperlink[0][0], $new_url, $text);
    		}
    		// bbcodes conversion
    		$text = preg_replace($this->bbcodes, $this->htmlcodes, $text);
    		// on remet toto à la place de [tata]
    		$pattern = '/(\[tata\])/';
    		$text = preg_replace($pattern, $sponsor, $text);
    		return $this->output($text);
    	}
    }

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

Discussions similaires

  1. Fonction ne retournant pas toujours une valeur
    Par mastochard dans le forum C
    Réponses: 14
    Dernier message: 25/05/2006, 12h13
  2. [CSS] a:active ne fonctionne pas toujours ?
    Par KpTn dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 10/05/2006, 17h25
  3. Réponses: 9
    Dernier message: 04/10/2005, 19h39
  4. db enregistre pas toujour
    Par cre3000 dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/05/2005, 12h16
  5. [VB6] [Validate et CausesValidation] Ca marche pas toujours !!!
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 16/12/2003, 22h09

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