2010-10-29 15 views
0

Je cherche un moyen de remplacer une chaîne en php qui correspond exactement au sujet.Remplacement de chaîne exact en php

Par exemple, j'obtenu un fichier nommé « bonjour-world.txt » ayant trois lignes:

'http://www.example.com/' 
'http://www.example.com/category/' 
'http://www.example.com/tag/name/' 

et je dois remplacer les 'http://www.example.com/' avec 'http://www.example2.com'

$string=file_get_contents('hello-world.txt'); 
$string=str_replace('http://www.example.com/','http://www.example2.com',$string); 
echo $string; 

je vais obtenir un résultat similaire à:

'http://www.example2.com/' 
'http://www.example2.com/category/' 
'http://www.example2.com/tag/name/' 

Mais ce dont j'ai réellement besoin est quelque chose comme ceci:

'http://www.example2.com/' 
'http://www.example.com/category/' 
'http://www.example.com/tag/name/' 

S'il Vous Plaît Aide !!!!

+0

Comment sont les chaînes séparées? – Jason

+0

J'ai testé le code que vous avez posté et il semble fonctionner correctement. Le seul problème que j'ai trouvé est que vous avez omis un/dans votre deuxième argument à str_replace, qui le fera sortir: http://www.example2.com http: //www.example2.comcategory/ http: // www .example2.comtag/name/ – OmnipotentEntity

+0

Hmm ... il semble que le texte a été légèrement modifié. Quelques éclaircissements s'il vous plaît, est-ce que OP n'a besoin que de la première valeur remplacée comme elle le dit actuellement ou remplace-t-elle seulement la première valeur et il a besoin d'eux tous remplacés comme je l'ai d'abord dit? – OmnipotentEntity

Répondre

2

Vous pouvez utiliser preg_replace avec le modificateur m comme:

$string=preg_replace('~^http://www\.example\.com/$~m','http://www.example2.com',$string); 

Code In Action

+0

Merci pour la solution qui a bien fonctionné. – sreejith

+0

Merci beaucoup :) – yanike

0

Vérifiez d'abord si la ligne actuelle est ce que vous cherchez. Sinon, recrache-le.

0

Soit $string=str_replace("'http://www.example.com/'", "'http://www.example2.com'", $string); puisque dans votre exemple, vous avez des guillemets simples autour de chaque ligne ou preg_replace comme ceci:

$string=preg_replace('/^http:\/\/www\.example\.com\/$/', 'http://www.example2.com/', $string); 

... si ces guillemets simples ne sont pas censés être là. Le $ à la fin de la regex signifie la fin de la ligne et le^signifie le début de la ligne. Les périodes et/doivent être échappées d'où le \. et \/

Je n'ai pas testé ce code. Voici un lien vers preg_replace() http://php.net/manual/en/function.preg-replace.php