Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/07/2008, 12h12   #1
Futur Membre du Club
 
Inscription : mai 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 25
Points : 17
Points : 17
Par défaut remplacement de la première occurrence avec ereg_replace()

j'ai un petit fichier de code avec deux elements à remplacer qui portent le même nom : ici popen une fonction php ->popen

chaine : popen ici


fichier texte que j'envoie à mon analyseur syntaxique
Code :
1
2
3
4
5
6
7
8
 
<title> bonjours </title>
function test_ipConfig()
   {
     $fp = popen('ipconfig /all','r');// resultat demandé popen1
	    echo nl2br(fread($fp,5000));
		popen'ipconfig /all','r'); resultat demandé popen 2
   }

Le code de l'expression prend toutes les expression popen et les remplace par popen1 . Ce que je voudrais moi c'est récupérer la premiére , la deuxiéme occurence de l'expression et ensuite la remplacer précisement sans tout changer dans le code source.

Est-ce possible avec la fonction ou ?


voici le code de la petite expression régulière qui recherche ma fonction popen et la met ici en gras.

Code :
1
2
3
 
 
$page =ereg_replace("popen","\\<b> popen1 </b>",$page);// ici il change toutes les occurrences de popen
persanbleue est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 14h42   #2
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 797
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 797
Points : 1 688
Points : 1 688
Salut,
tu peux utiliser cette fonction :

Code :
1
2
3
4
5
6
7
8
function format($match, $str)	{
	$offset = -1;
	$i = 1;
	while(($offset = strpos($str, $match, $offset + 1)) !== false)	{
		$str = substr_replace($str, $match.$i++, $offset, strlen($match));
	}
	return $str;
}
appel :

Code :
echo format("popen", $tachaine);
J'ai considéré que tu pouvais avoir plus de 2 appels à popen mais tu peux faire plus simple si tu as toujours le même type de fichier.
Le code est un peu concis si t'as un souci, hésite pas.
Bye
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/07/2008, 15h34   #3
Futur Membre du Club
 
Inscription : mai 2008
Messages : 25
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 25
Points : 17
Points : 17
Par défaut merci j'ai apporté une petite amélioration pour tenir compte de la position

Code :
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
 
function formatpos($match, $str,$pos)
{
	$offset = -1;
	$i = 1;
	echo 'position : '.$pos;
	while(($offset = strpos($str, $match, $offset + 1)) !== false)	
	{
		if($i==$pos)
		{
 
         //$i++;
		 $str = substr_replace($str, 
		          $match.$i++,				  
				  $offset,
				  strlen($match));
		}
		else
		{
		  /*$str = substr_replace($str, 
		          $match.$i++,				  
				  $offset,
				  strlen($match));*/
			$i++;	  
		}
 
	}
	return $str;
}
Code :
1
2
3
 
$pos =3;// 3 eme occurence de la chaine function
 echo formatpos("function", $page,$pos);
persanbleue est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h12.


 
 
 
 
Partenaires

Hébergement Web