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 :

Problème avec les espaces entre deux tags [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut Problème avec les espaces entre deux tags
    Bonjour,

    J'ai créer un MiniWiki sur lequel, lorsqu'on veut créer une page on entoure son nom de deux parenthèses. Exemple ((nouvelle page)).

    Mon expression régulière transforme le regex en lien.
    Voici mon regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $text = ereg_replace("\(\((('?[[:alnum:]^\)\n\)])*)\)\)", "<a href=\"".$self."?\\1\">\\1</a>", $text);
    Tous fonctionne bien sauf quand il y à un ou des espaces.

    Je me prend la tête sur ce regex depuis quelques jours.....
    Quelqu'un peut-il m'aider ?

    Merci d'avance
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  2. #2
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut J'avance
    Bon, je vous tiens au courrant

    J'ai trouvé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = ereg_replace("\(\((('?[[:alnum:]|[:space:]^\)\n\)])*)\)\)", "<a href=\"".$self."?\\1\">\\1</a>", $text);
    Ca fonctionne mais seulement si il n'y a qu'un espace.....

    Je continu à chercher en attendant de l'aide
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  3. #3
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut Oups
    Suite ...

    Le disfonctionnement ne vient pas du nombre d'espace !!!!!
    Mais des caractères accentués !!!!

    Je cherche
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Quelques remarques :
    • vous pourriez expliquer cette partie : [[:alnum:]|[:space:]^\)\n\)] ?
      • les backslahs devant les parenthèses ne sont pas nécessaires
      • une alternative dans une classe ne fonctionnera pas (ie | sera compris comme le caratère |)
      • même chose pour ^ (ce ne sera ni une négation ni une ancre de début de ligne/chaîne)
      • \n est le caractère de nouvelle ligne sous Linux uniquement (\r sous Mac et \r\n sous Windows)
    • les fonctions POSIX (ereg_*) sont dépréciées, il est vivement recommandé d'utiliser les fonctions PCRE (preg_*)
    • avec les fonctions PCRE il vous suffit d'utiliser \s* ou alors [[:space:]]* ("portable") (mais pas dans les classes)


    Vous vouliez les avoir ou les espaces (devant, derrière, dans le nom) ?

    Edit : PCRE se base sur les locales pour inclure les caractères accentués, ça fait une raison de plus pour utiliser ces fonctions.

  5. #5
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Bon, je comprend pas tout mais je vais essayer de vous expliquez clairement.

    Voici où ça se passe : http://wiki.arizona-dream.com/tests.php?Essai

    Rappel de ce que je souhaite :
    Fiare un lien sur toute chaines de caractère commençant par (( et finissant par ))
    La chaine à l'intérieur des double parenthèse peut contenir :
    1. Tous caractères alphabéthique (avec accents ou pas ET majuscule ou pas)
    2. Un ou plusieurs numéro
    3. Un ou plusieurs espaces


    Rappel du problème :
    Quand il y a un caractère accentué, cela ne fonctionne plus

    Vous me dites :
    # une alternative dans une classe ne fonctionnera pas (ie | sera compris comme le caratère |)
    # même chose pour ^ (ce ne sera ni une négation ni une ancre de début de ligne/chaîne)
    Je viens d'essayer sous IE et c'ela fonctionne aussi bien que sous Firefox ????

    Je sais que les POSIX sont déprécier mais j'ai déjà tellement de mal avec que j'ai pas envie dde récrire un PCRE

    Si vous n'avez pas la solution, j'essairai un PCRE
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 778
    Points
    17 778
    Par défaut
    Citation Envoyé par elcoyotos
    Rappel de ce que je souhaite :
    Fiare un lien sur toute chaines de caractère commençant par (( et finissant par ))
    La chaine à l'intérieur des double parenthèse peut contenir :
    1. Tous caractères alphabéthique (avec accents ou pas ET majuscule ou pas)
    2. Un ou plusieurs numéro
    3. Un ou plusieurs espaces
    Comme j'essayais de le dire avec mon edit (désolé nos posts se sont croisés) : les fonctions PCRE se basent sur les locales et ajoutent à certaines classes prédéfinies les caractères accentués. La traduction exacte serait donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("#\(\(([[:alnum:][:space:]]+)\)\)#", "<a href=\"".$self."?$1\">$1</a>", $text);
    Voir à améliorer un peu parce qu'elle accepte une double-parenthèse composée uniquement d'espaces :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text = preg_replace("#\(\(([[:alnum:]][[:alnum:][:space:]]+)\)\)#", "<a href=\"".$self."?$1\">$1</a>", $text);
    Ici elle devra impérativement commencer par un chiffre ou une lettre.

    Maintenant si vous voulez garder les fonctions ereg, il faut ajouter les codes hexadécimaux des caractères accentués ...

    Citation Envoyé par elcoyotos
    Je viens d'essayer sous IE et c'ela fonctionne aussi bien que sous Firefox ????
    Je voulais simplement m'assurer de la signification de votre classe, le navigateur n'ayant rien à voir là-dedans, PHP est exécuté côté serveur.

  7. #7
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Merci julp pour votre aide.

    Quand vous m'avez parlé de IE je commençais à douter de vos compétences.
    Mais, pour avoir vérifier, cela en dit long sur mon degré de desespoir

    Mais revenons à mes moutons :

    Votre PCRE fonctionne parfaitement mais il à le même comportement que mon POSIX.

    A savoir que, quand il y a un caractère accentué, il ne fonctionne pas !!!!

    Que dois je lui ajouté ????????
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  8. #8
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Il faut remplacer
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [[:alnum:][:space:]éèàùêâû]
    A tester mais normalement ça devrait être bon ^^

  9. #9
    Membre actif Avatar de elcoyotos
    Homme Profil pro
    Amateur passionné
    Inscrit en
    Octobre 2006
    Messages
    490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Amateur passionné

    Informations forums :
    Inscription : Octobre 2006
    Messages : 490
    Points : 294
    Points
    294
    Par défaut
    Milles mercis à vous nobles développeurs

    Ca fonctionne parfaitement
    Écoute, sinon ta langue te perdra (proverbe Navajo)

  10. #10
    Membre éclairé Avatar de Korko Fain
    Profil pro
    Étudiant
    Inscrit en
    Août 2005
    Messages
    632
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2005
    Messages : 632
    Points : 718
    Points
    718
    Par défaut
    Peut fonctionner aussi à la limite mais ça dépend de ton serveur ^^
    Disons que si ça fonctionne ça t'évite de te taper la liste entiere des caractères accentués :p

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 20/11/2012, 14h24
  2. Réponses: 2
    Dernier message: 08/02/2008, 11h49
  3. [MySQL] Requête MySQL : problèmes avec les espaces
    Par superseba888 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/07/2007, 16h12
  4. Problème avec les espaces dans un tableau !
    Par remixtech dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 10/07/2006, 19h30
  5. [Winsock] Problème avec les espaces
    Par Fiquet dans le forum Développement
    Réponses: 3
    Dernier message: 12/01/2006, 18h06

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