IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Expression régulière et longueur de chaine [RegEx]


Sujet :

Langage PHP

  1. #21
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    non toujours pas :

    Warning: preg_replace_callback() requires argument 2, 'test_lenght', to be a valid callback

  2. #22
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    L'idée de l'entraide est que chacun y mette du sien...

    Mise au point :
    • Oublier les fonctions POSIX (ereg)
    • Adopter les fonctions PCRE (preg)
    • Les PCRE ont besoin de délimiteurs (le même caractère en début et fin d'expression) pour fonctionner, car cela permet de mettre des modificateurs à la fin de la regex (cf. la doc sur les PCRE)
    • Utiliser une fonction de callback signifie que l'on délègue le remplacement de preg_replace à une autre fonction. Il faut donc que cette autre fonction soit définie dans le code...
    cbroissa : essaie de lire attentivement le code que l'on te propose et de le comprendre avant de crier au secours. En l'occurence, je suppose que tu as supprimé la fonction de callback fournie auparavant par Anduriel.

  3. #23
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    non je n'ai pas supprimé la fonction,
    j'ai malheureusement pas le temps de me pencher sur les regex que je ne maitrise pas, c'est pour ça que je demande une aide complète.

  4. #24
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Rofl...

    test_lenght => test_length

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <?php
     
    define('MAX_SIZE',  50);
     
    function test_length($matches) {
       $str = $matches[1].'://'.$matches[2];
       if (strlen($str) > MAX_SIZE)
          return '<a href="'.$str.'" target="_blank" class="style">'.substr($str, 0, MAX_SIZE).'...<a>'.$matches[3];
       else
          return '<a href="'.$str.'" target="_blank" class="style">'.$str.'<a>'.$matches[3];
     
    }
     
    $message = 'Salut, http://www.killtrees.free.fr/test/index.php?id=1&php=2# test';
     
    echo preg_replace_callback('#(http|ftp)://([a-z0-9.?/&=\#]+)([[:space:]]+|$)#Usi', 'test_length', $message);
     
    ?>
    Ce code fonctionne très bien chez moi. L'original d'Anduriel également.
    Question : pourquoi avoir mis "|$" à la fin ?

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    bon ben là, j'ai rien à dire, sauf à présenter mes excuses,
    j'ai corrigé la faute d'orthographe, et j'ai repris le code sans recorriger la faute,

    merci pour la leçon Yogui,

    merci à tous les autres pour votre aide en particulier Anduriel.

  6. #26
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Lol, désolé pour toi, je ne pouvais pas deviner :/

    Juste un truc que je n'avais pas vu : mettez toujours les accolades. C'est mieux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    <?php
     
    define('MAX_SIZE',  50);
     
    function test_length($matches) {
        $str = $matches[1].'://'.$matches[2];
        if(strlen($str) > MAX_SIZE){
            return '<a href="'.$str.'" target="_blank" class="style">'.substr($str, 0, MAX_SIZE).'...<a>'.$matches[3];
        }
        else{
            return '<a href="'.$str.'" target="_blank" class="style">'.$str.'<a>'.$matches[3];
        }
    }
     
    $message = 'Salut, http://www.killtrees.free.fr/test/index.php?id=1&php=2# test';
     
    echo preg_replace_callback('#(http|ftp)://([a-z0-9.?/&=\#]+)([[:space:]]+|$)#Usi', 'test_length', $message);
     
    ?>

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    Des accolades ? des simples guillemets tu veux dire ? je vois que ce changement le Usi pour ne pas tenir compte de la casse.

    ça sert à quoi de mettre ' plutôt que " ?

  8. #28
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    J'ai ajouté des accolades au if/else.
    Pour les guillemets : http://pbnaigeon.developpez.com/tuto...phe-guillemet/

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 42
    Points : 17
    Points
    17
    Par défaut
    oulala,
    faut que j'arrête.

    merci pour le lien

    EDIT : une petite amélioration pour avoir les caractères - et _ dans les url

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    $message = preg_replace_callback('#(http|ftp)://([a-z0-9.\-_?/&=\#]+)([[:space:]]+|$)#Usi', 'test_length', $message);

  10. #30
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Citation Envoyé par Yogui
    Ce code fonctionne très bien chez moi. L'original d'Anduriel également.
    Question : pourquoi avoir mis "|$" à la fin ?
    Salut,
    En fait il voulais que ça convertisse en fin de chaine, et $ indique une fin de chaine. Donc pour moi ça veut dire "prendre jusqu'à l'espace ou (|) la fin de chaine ($)". C'est pas comme ça que tu ferai? D'ailleur ça métonne que ça fonctionne

  11. #31
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Non, j'aurais simplement mis [[:space:]]? pour rendre l'espace obligatoire mais pas la barre | car je ne sais pas comment réagit PHP face à cette expression précie. Est-ce qu'il considère qu'il lui faut un caractère après |, donc il convertit le dollar en caractère au lieu de le prendre pour ancre de "fin de chaîne" ? Est-ce qu'il voit le dollar et se dit "flûte, il m'a pas donné d'alternative, je zappe la barre |" ? Est-ce qu'il zappe à la fois la barre et le dollar ?
    Aucune idée mais je doute que cette expression réagisse comme tu le souhaitais. Si tu n'en as pas le coeur net, il vaut mieux trouver une solution plus évidente (et il y en a).

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Expression régulière: extraction de sous-chaine
    Par Icegirl dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2014, 11h07
  2. Expression régulière. Négation d'un chaine
    Par Ruyneau dans le forum Général Python
    Réponses: 4
    Dernier message: 20/02/2012, 08h29
  3. Expression régulière : Découpage d'une chaine
    Par hisoft dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 23/11/2010, 10h33
  4. Expression régulière : tester existence sous-chaine en fin de chaine
    Par GEFIRO1 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 17/09/2007, 12h03
  5. Réponses: 11
    Dernier message: 24/03/2006, 11h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo