2011-03-22 3 views
0

J'ai ce lien: http://mysite/myfolder/it/my-keywords.html et que vous souhaitez remplacer/il/avec/es/(2 codes pays lettres)me aider à comprendre le preg_replace de PHP

Je pourrais explode() avec delimiter "/" mais je voudrais comprendre si preg_replace serait mieux.

essayé:

preg_replace("/\/([a-z]{2})/\/", $link, $country); 

EDIT réponse:

preg_replace("/\/[a-z]{2}\//", "/$country/", $link); 
+1

Ceci est plus simple si vous avez choisi un delimiter regex alternatif (vous pouvez éviter l'échappement, ce qui vous clairement trébuché un peu): 'preg_replace ("@/[az] {2}/@", $ link, $ country); ' –

+0

Autre délimiteur. Merci pour le conseil Frank! – FFish

Répondre

1

preg_replace est comme un couteau suisse. Preg plutôt que ereg signifie qu'il utilise des expressions rationnelles compatibles Perl. Il correspond d'abord à param (regex), remplace par second param (string) dans third param (string).

Les expressions régulières sont optimisées pour l'efficacité en utilisant des techniques de coupure d'arborescence de recherche, etc ... sont donc généralement une méthode alternative efficace.

Cela devrait faire ce que vous voulez.

preg_replace("/\/it\//","/es/","http://mysite/myfolder/it/my-keywords.html") 
+0

Merci Billy de m'avoir montré l'expression régulière correcte en échappant aux barres obliques. Je pense que vous feriez mieux d'utiliser des guillemets doubles ... – FFish

0

preg_replace est utile si vous ne connaissez une partie de chaîne que vous voulez faire correspondre, mais d'autres parties sont variables. Dans votre cas, le dossier/it/est déjà suffisamment unique pour qu'un remplacement statique fonctionne. Utilisez str_replace à la place:

$url = str_replace("/it/", "/es/", $url); 
+0

@FFish; Apprenez re et les fonctions PHP connexes. Donc, pour les cas, à l'avenir, ne demandera pas un plus dupliqué. – miqbal

+0

salut, en fait le lien est dynamique. J'ai besoin de quelque chose comme preg_replace ("/ \/([a-z] {2})/\ /", $ link, $ pays); – FFish

+0

@FFish; Si vous avez déjà la regex appropriée, quelle est exactement votre question à ce sujet? – mario