Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/04/2007, 16h45   #1
Membre actif
 
Avatar de elcoyotos
 
Inscription : octobre 2006
Messages : 297
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 297
Points : 175
Points : 175
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 :
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
elcoyotos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 19h26   #2
Membre actif
 
Avatar de elcoyotos
 
Inscription : octobre 2006
Messages : 297
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 297
Points : 175
Points : 175
Par défaut J'avance

Bon, je vous tiens au courrant

J'ai trouvé ça :
Code :
$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
elcoyotos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 19h41   #3
Membre actif
 
Avatar de elcoyotos
 
Inscription : octobre 2006
Messages : 297
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 297
Points : 175
Points : 175
Par défaut Oups

Suite ...

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

Je cherche
elcoyotos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 19h47   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 20h20   #5
Membre actif
 
Avatar de elcoyotos
 
Inscription : octobre 2006
Messages : 297
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 297
Points : 175
Points : 175
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 :
Citation:
# 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
elcoyotos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/04/2007, 21h31   #6
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
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 :
$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 :
$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.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 08h38   #7
Membre actif
 
Avatar de elcoyotos
 
Inscription : octobre 2006
Messages : 297
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 297
Points : 175
Points : 175
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é ????????
elcoyotos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 09h17   #8
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Il faut remplacer
Par
Code :
[[:alnum:][:space:]éèàùêâû]
A tester mais normalement ça devrait être bon ^^
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 10h57   #9
Membre actif
 
Avatar de elcoyotos
 
Inscription : octobre 2006
Messages : 297
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : octobre 2006
Messages : 297
Points : 175
Points : 175
Milles mercis à vous nobles développeurs

Ca fonctionne parfaitement
elcoyotos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/04/2007, 11h01   #10
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
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
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h50.


 
 
 
 
Partenaires

Hébergement Web