2010-10-10 7 views
0

J'ai deux cordes comme:en utilisant preg_match et preg_replace

http://localhost/web/

et

http://localhost/web/category/

qui deviennent parfois:

http://localhost/web/2/, http://localhost/web/3/ etc ....

et

, http://localhost/web/category/3/ etc ...

Je veux faire une vérification et:

Si le lien est http://localhost/web/ il reste le même.

Si le lien est http://localhost/web/2/ il devient http://localhost/web/

Si le lien est http://localhost/web/category/ il reste le même.

Si le lien est il devient http://localhost/web/category/

Je suppose que cela doit être fait en utilisant preg_replace() et preg_match().

Comment puis-je le faire?

Merci.

+0

Pouvez-vous clarifier si vous vouliez dire "ht-tp" littéralement ou si vous écrivez juste de cette façon pour que les liens ne soient pas créés? –

+0

c'est juste pour empêcher les liens automatiques – medk

+0

@ mohamed87, vous pouvez simplement mettre en forme des exemples de liens comme code source (utilisez le bouton 0101010 de la barre d'outils). –

Répondre

2

Ce qui suit est l'expression régulière, vous aurez besoin:

(http:\/\/localhost\/)(web|web\/category)\/([\d]+)\/ 

Pour la fonction preg_replace, vous aurez besoin d'une déclaration de remplacement qui récrire la chaîne en fonction de vos critères:

'$1$2' 

L'instruction de remplacement ci-dessus concatène essentiellement le premier groupe de capture (premier jeu de parens qui est évalué à http://localhost/) avec le deuxième groupe de capture de «web» ou de «web/category». Puisque nous ne nous soucions pas du dernier groupe de capture (3 $), nous ne l'ajoutons pas à l'énoncé de remplacement; Cependant, nous pourrions le faire depuis que nous le capturons. Si vous ne voulez pas le capturer, remplacez ce "([\ d] +)" par "[\ d] +".

Ce qui suit est un exemple de code qui comprend le motif en remplaçant, pour former une instruction complète preg_replace:

<?php 

$pattern = '@(http:\/\/localhost\/)(web|web\/category)\/([\d]+)\/@i'; 

$subjects = array(
    'http://localhost/web/2/', 
    'http://localhost/web/category/2/' 
); 

foreach ($subjects as $subject) { 
    echo sprintf('Original: %s, Modified: %s', $subject, preg_replace($pattern, '$1$2', $subject)), PHP_EOL; 
} 

lancer le code ci-dessus dans un fichier (par exemple: replace.php) et l'exécuter via la ligne de commande:

php replace.php 
+0

excellent! c'est ce dont j'ai besoin. Merci beaucoup! – medk