preg_replace : plusieurs fois le même motif

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : preg_replace : plusieurs fois le même motif

Re: preg_replace : plusieurs fois le même motif

par pat29 » 14 mai 2013, 09:34

Bonjour blof,
super, c'est exactement ce que je cherchais!
Merci beaucoup!

Re: preg_replace : plusieurs fois le même motif

par blof » 14 mai 2013, 04:39

Bonjour,

On ne fera jamais mieux que ce tuto : http://lumadis.be/regex/tuto_pcre.php

Ce que tu cherches à faire se trouve dans le chapitre "Les références arrières (back reference)"

Re: preg_replace : plusieurs fois le même motif

par pat29 » 14 mai 2013, 00:13

Bonjour,
merci pour ta réponse, mais ça ne fait pas exactement ce que je veux.
Ce que je voudrais c'est que dans le cas où j'ai 2 expressions capturantes, forcer la 2e expression capturante à être identique à la 1ère, c'est-à-dire dans l'exemple ci-dessous, ci j'ai "a" dans la 1ère expression, avoir forcément "a" dans la 2e. Si j'ai "b" dans la 1ère expression avoir forcément b dans la 2e...
$html = preg_replace('/<(a|b|c|d)>(.*?)(\/a|b|c|d)/', '<$1>$2</$1>', $html);
Cela aurait été simple si l'on pouvait utiliser les variables dans le pattern également, du genre
$html = preg_replace('/<(a|b|c|d)>(.*?)$1/', '<$1>$2</$1>', $html);
Mais cela n'étant pas possible comment peut-on procéder ?
Merci de votre aide!

Re: preg_replace : plusieurs fois le même motif

par ghost5922 » 13 mai 2013, 23:30

Bonjour,

a tester
$html = preg_replace('/<(p|\/p|li|\/li)>/', '<#$1>', $html);

preg_replace : plusieurs fois le même motif

par pat29 » 13 mai 2013, 22:56

Bonjour,

y-a-t-il un moyen dans le pattern d'un preg_replace de spécifier le fait que l'on veut plusieurs fois le même motif ?
Par ex. je voudrais écrire en une seule ligne les 2 lignes suivantes:
$html = preg_replace('/<p>(.*?)<\/p>/', '<#p>$1</#p>', $html);
$html = preg_replace('/<li>(.*?)<\/li>/', '<#li>$1</#li>', $html);

Si j'écris cela :
$html = preg_replace('/<(p|li)>(.*?)<\/(p|li)>/', '<#$1>$2</#$1>', $html);
le problème est que ça fonctionne aussi pour le code incorrect suivant
$html = '<p>test</li>'
Je voudrais donc qque chose du genre :
$html = preg_replace('/<(p|li)>(.*?)<\/$1>/', '<#$1>$2</#$1>', $html);

Est-ce possible ?

Merci de votre aide!

Patrick