Page 1 sur 1

Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 13:24
par visualight
Bonjour,

Je ne parviens à trouver une bête solution pour nettoyer une chaine.
En fait, j'essaye de supprimer le http:// OU http://www d'une chaine.

Ex.: http://www.google.be doit donner : google.be et http://domaine.google.be doit donner : domaine.google.be

Pouvez-vous m'aider ?

Expression régulière ? Comment ?

Merci :)

Re: Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 13:32
par visualight
Ah oui, J'ai testé ceci : mais cela ne fait rien : ^(http:\/\/|http:\/\/www)

Re: Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 13:35
par Mazarini
personnellement, j'utiliserai la fonction substr() pour découper la chaine de caractères en testant le début et en conservant la fin si le début contient les chaines recherchées.

Re: Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 13:50
par visualight
Bonjour,

C'est bon, j'ai trouvé ... erreur de ma part pour l'expression régulière.
En effet en mettant comme masque le http:// en premier, la condition renvoyait toujours true.

Il faut donc procéder comme suit :
$subdom = preg_replace("/^(http:\/\/www.|http:\/\/)/", "", $url);
Exemple :
- Pour la chaine http://domaine.google.be, cela renvoie (domaine.google.be)
- Pour la chaine http://www.google.be, cela renvoie (google.be)

Donc plus pratiquement si on veut tester l'existence d'un sous domaine, il faut faire un explode comme suit :
$subdom = preg_replace("/^(http:\/\/www.|http:\/\/)/", "", $url);
$subdom = explode('.', $subdom);

if (!empty($subdom[0])) {
            $subdom = $subdom[0];
        } else {
            $subdom = 'N/A';
        }
Merci,
Raph

Re: Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 13:50
par Ryle
Bah l'expression régulière est bien plus pratique, tu n'es d'ailleurs pas loin... Si toutes tes chaines commencent par http://, tout ce que tu as à vérifier ensuite c'est la présence ou non de la chaine "www." : ^http:\/\/(www\.)?
echo preg_replace("#^http:\/\/(www\.)?#", "", $taChaine);
Tu peux même ajouter un contrôle sur les url sécurisées avec un "http(s)?"

Re: Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 13:53
par visualight
Merci Ryle ! Comment vas tu depuis le temps ?

Re: Nettoyer une chaine (expr.Reg)

Posté : 06 juin 2012, 17:21
par Ripat
Assez d'accord avec Ryle, quand on a la flemme de construire une solution sur les fonctions de chaîne les regex sont bien pratiques.

Une petite suggestion d'optimisation: les parenthèses de la partie optionnelle www ne doivent pas être capturantes. On gagne à peu près 30% en les rendant non-capturantes.
http://lumadis.be/regex/test_regex.php?id=1187

Il n'est pas nécessaire non plus d'échapper les //. On ne gagnera rien en performance en les supprimant mais en lisibilité oui. ^_^