Pb de eregi_replace - PHP - Programmation
Marsh Posté le 04-07-2005 à 17:00:51
normal car tu n'autorises pas les espaces dans ton masque ([^ <]*)
et utilises preg_replace, c'est plus performant et ya plus d'options
Marsh Posté le 04-07-2005 à 17:02:25
soju a écrit : normal car tu n'autorises pas les espaces dans ton masque ([^ <]*) |
il interdit explicitement les espaces, même
Marsh Posté le 04-07-2005 à 17:24:31
masklinn a écrit : il interdit explicitement les espaces, même |
lol forcément ça risque de ne pas bien marcher ... Les copier coller à partir de codes trouvés sur le net, c'est pas top ...
Par contre, vu que je suis novice dans les expressions régulières, est-ce que vous pourriez me donnez le masque qu'il me faudrait ?
Merciiii !
Marsh Posté le 04-07-2005 à 18:35:31
$pattern = '#\[(.+) -> ([^ \]]+)\]#';
Avec preg_replace, ça devrait le faire.
Marsh Posté le 04-07-2005 à 20:18:30
Il ne faut pas echapper ] lorsqu'il est dans une definition de classe [] car tous les caracteres perdent leur meta-sens dans une definition de classe.
Pour le cas particulier de ] et - il faut les placer en derniere posision.
- peut etre placé en premiere (il me semble) position egalement.
En consequence ... dans ton exemple le \] repesente le caractere \ et le ].
Marsh Posté le 04-07-2005 à 20:33:24
Ah vi, il me semble avoir déjà entendu ça qqpart.
Cela dit après test, il ne semble pas qu'un \ dans l'URL (à droite de "->" ) change quoi que ce soit au résultat de preg_replace, que ce soit avec ou sans l'échappement du ]...
Marsh Posté le 04-07-2005 à 20:38:25
sielfried a écrit : Cela dit après test, il ne semble pas qu'un \ dans l'URL (à droite de "->" ) change quoi que ce soit au résultat de preg_replace, que ce soit avec ou sans l'échappement du ]... |
Ben etant donné que l'url ne contient pas de '\' il n'y aura aucun probleme mais le pattern est tout de meme faux.
Marsh Posté le 04-07-2005 à 20:43:43
Ben tu dis que \] dans mon truc représente \ et ].
Donc ça devrait merder quand l'url à droite de la flèche contient un \ en plein milieu. Mais c'est pas le cas.
En fait ça réagit exactement pareil en échappant ou pas.
Marsh Posté le 07-07-2005 à 14:59:09
Alors, j'ai fait des tests avec
Code :
|
de sielfried
Voici mon jeu de tests :
1) [Lien -> http://www.google.fr]
2) [Mon lien -> http://www.google.fr]
3) Voici un autre [lien -> http://www.google.fr], ici, et un autre [là -> http://www.google.fr].
- Les 2 premiers liens fonctionnent très bien, avec un ou plusieurs mots.
- La 3e ne marche pas. En fait, quand il y a plusieurs liens sur une même ligne (sans retour charriot en fait), ça merdouille ! Voilà le code HTML créé pour ces 3 lignes :
Code :
|
En fait, il va chercher le dernier "]" qu'il peut trouver dans le paragraphe.
Une solution ?
Marsh Posté le 07-07-2005 à 15:10:37
Un truc du genre
\[(.*?) ?-> ?([^ \]]+?)\] |
(fait chier que le moteur regex de PHP ne comprenne pas "\s" )
Accessoirement, cette regex fonctionnera même si tu oublies des espaces (genre [lien->http://www.google.com])
Marsh Posté le 07-07-2005 à 15:19:32
Génial ça marche !
Par contre, il faut mettre des "#" autour de l'expresssion réguliere. Je sais pas pourquoi ... à quoi ça sert ?
Je poste la fonction complète pour ceux que ça intéresse ...
Code :
|
Marsh Posté le 07-07-2005 à 15:20:44
Aucune idée, je fais pas de regex en PHP moi
J'utilise des vrais langages avec des vrais modules, genre Python "re"
Marsh Posté le 07-07-2005 à 15:23:27
masklinn a écrit : Un truc du genre
|
Ah ben wai, fallait de la "lazyness". Ca devrait être par défaut ce truc, ça sert si souvent.
Marsh Posté le 07-07-2005 à 15:27:23
fabowl a écrit : Génial ça marche ! |
Il faut un délimiteur autour de la regexp. En général on met \, mais n'importe quel autre car non alphanumérique peut faire l'affaire. Si tu dois l'utiliser dans le masque par contre, faudra l'échapper avec \ dans ce cas.
Je trouve # plus clair que \ donc je l'utilise, ce n'est qu'une question de goût.
Marsh Posté le 07-07-2005 à 15:32:29
sielfried a écrit : Ah ben wai, fallait de la "lazyness". Ca devrait être par défaut ce truc, ça sert si souvent. |
Chez moi c'est pas "lazy" c'est "non greedy" (+ et * étant considéré comme des qualificateurs "greedy" )
Je trouve ça à la fois beaucoup plus clair et plus sympa
Marsh Posté le 07-07-2005 à 15:41:53
masklinn a écrit : Chez moi c'est pas "lazy" c'est "non greedy" (+ et * étant considéré comme des qualificateurs "greedy" ) |
Voui bon, hein, on s'est compris.
Marsh Posté le 04-07-2005 à 16:56:50
Bonjour,
J'aimerais utiliser les expressions régulières pour créer des liens dans un texte.
Exemples :
Ma fonction marche sauf qu'elle ne gère pas les espaces dans le texte du lien (ex 1 fonctionne mais pas le 2)
Qu'est c equ'il me manque dans mon pattern pour que ça fonctionne ?
Merci