expressions regulieres

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 : expressions regulieres

par ichiro » 18 sept. 2007, 17:11

merci a vous les deux solutions marchent :D . Faut que je traffic un peu mais je devrai m'en sortir ^^.Le post est résolu :wink:

par Ripat » 18 sept. 2007, 16:03

Une possibilité parmi d'autres:
// tableau des choses à remplacer [^]]* veut dire tout caractère qui n'est pas un ]
$remplacer = array('#\[[^]]*\]#', '#-_#'); 

// tableau des remplacements
$par = array('', ' ');

// exécution de la regex
$change = preg_replace($remplacer, $par, $nom);

par Truc » 18 sept. 2007, 15:42

un exemple rapide (peut être pas parfait... trop peu d'infos) :
function replace($v)
{
	$v[1] = str_replace("_","",$v[1]);
	$v[1] = str_replace("-","",$v[1]);
	return $v[1];
}
			    		
$s = "bla [team]nom_ep-[team].avi bla";
$s = preg_replace_callback('#\[\w+\](.+)\[\w+\]#','replace',$s);
echo "after : ".$s;	  
l'expression correspond à toute la partie à remplacer et la capture du mat à garder.
et le callback correspond juste à l'appel de la fonction de remlacement des caractères tels que "-" et "_" pour le mot capturé entre les [].

par ichiro » 18 sept. 2007, 14:40

j'ai deja remplacer certain caractères comme le tiret haut ou le tiret bas à l'aide de
ereg_replace('_|-',' ',$nom)
je veux juste supprimer tous ce qui se trouve entre [] pour avoir un affichage épuré
donc pour te répondre AB ce qu'il peut y avoir à l'interieur des crochets va varier c'est certain, mais je pensais qu'on utilisant les expressions régulières je pourrai séparé les expressions qui débutent par [ et qui finissent par ] pour ensuite les supprimer tout simplement :wink:

En ce qui concerne preg_replace_callback() je dois avoué que j'ai pas tout compris encore et je vois pas comment je pourrais m'en servir pour mon script.
J'attend de vos nouvelles :P

par Truc » 18 sept. 2007, 12:51

Très juste :wink:

Tu veux capturer ce qu'il y a entre ces balises + remplacer certains caractères => preg_replace_callback()

Inspire toi de ce qui existe déjà :wink:

par AB » 17 sept. 2007, 23:21

oki pour l'exemple :wink:
Alors voila ce que j'aimerai
nom original:[team]nom_ep-[team].avi
changement :nom ep.avi
Comme je l'ai dis je veux juste supprimer tous ce qui se trouve entre [] pour avoir un affichage épuré.
Merci de votre aide :merci:
[team] est une balise toujours identique? Je veux dire est-ce que tu ne rencontreras pas par ex [tom]?

Le nom original à changer contient-il une ou plusieurs expression à changer? ex: nom original = '[team]nom_ep-[team].avi taratata [team2]nom2_ep-[team2].avi turlututu';

Difficile de t'aider sans avoir plus de précisions.

par ichiro » 17 sept. 2007, 18:13

oki pour l'exemple :wink:
Alors voila ce que j'aimerai
nom original:[team]nom_ep-[team].avi
changement :nom ep.avi
Comme je l'ai dis je veux juste supprimer tous ce qui se trouve entre [] pour avoir un affichage épuré.
Merci de votre aide :merci:

Re: expressions regulieres

par Truc » 17 sept. 2007, 16:53

J'aimerai remplacer une partie de chaine de caractère comprise entre [ et ] par un espace.
nom original:[team]nom_ep-[team].avi
changement :[team]nom ep [team].avi
Pas bon ?
Si tu nous donnais un exemple concret départ et arrivé :-k

par ichiro » 17 sept. 2007, 16:22

J'ai fais le changement que tu m'a demandé et voila ce que ça me retourne :
nom original:[team]nom_ep-[team].avi

changement :[team]nom ep [team].avi
et quand j'enleve les options
$nom="[team]nom_ep-[team].avi";
$change=ereg_replace('_|-',' ',$nom);
$change=ereg_replace('\[.*\]',' ',$change);
nom original:[team]nom_ep-[team].avi

changement : .avi
je vois pas ou est l'erreur ...

par Ryle » 15 sept. 2007, 00:24

Hum.. enlève l'option U dans l'expression, il prend en fait la correspondance la plus large au lieu de distinguer les deux...

A noter qu'il est recommandé de préférer preg_replace() qui est plus rapide que ereg_replace()

par ichiro » 14 sept. 2007, 20:41

C'est presque ça mais il semblerai que le ] ne "referme" pas l'expression. Voila ce que ca m'affiche:
nom original:[team]nom_ep-[team].avi

changement : .avi
Je comprend pas trop pourquoi ça marche pas :cry: . Est ce du au fait qu'il rencontre un autre crochet [ ?

par Ryle » 14 sept. 2007, 20:15

Dans les expressions régulière, le crochet est utilisé pour délimiter les classes. Si c'est le caractères crochet que tu recherches, il te faut le protéger d'un antislash pour éviter la confusion.
Par ailleurs, l'étoile indique le nombre d'occurence d'un caractère ou d'une chaine (à savoir de 0 à n). Il doit donc suivre le caractère (ou la chaine) répété(e). Et si ce caractère peut être n'importe quel caractère, alors on le symbolie par un point.

Code : Tout sélectionner

"#\[.*\]#Ui"

expressions regulieres

par ichiro » 14 sept. 2007, 19:27

Bonjour a tous,
J'aimerai remplacer une partie de chaine de caractère comprise entre [ et ] par un espace.
Je ne sais pas comment indiquer à la fonction ereg_replace l'expression approprié. Mon dernier test (qui ne marche pas evidemant ^^)
$nom="[team]nom_ep-[team].avi";
$change=ereg_replace('_|-',' ',$nom);
$change=ereg_replace('[*]',' ',$change);

echo "nom original:".$nom."</br>";
echo "<br>changement :".$change."</br>";
Un coup de patte plz :wink:[/b]