Regex du tonnerre de Zeus [PHP] - PHP - Programmation
Marsh Posté le 02-05-2006 à 15:16:12
le pattern doit pas être délimité avec preg_replace ?
genre preg_replace( '/\[b\]/', '<b>', $BBCode )
Auquel cas tes parenthèses ont ptet joué le rôle de délimiteur.
J'ai pas testé et je dis surement des conneries étant un grand professionnel averti des regex !
Marsh Posté le 02-05-2006 à 16:38:10
Ah merde, j'avais pas vu ça quand j'ai lu la doc
Bon ben j'y retourne, merci beaucoup
Marsh Posté le 03-05-2006 à 13:04:35
Cool, j'ai fait un truc comme ça donc :
Code :
|
C'est rigolo, ça marche.
Enfin à moitié, parce que si j'imbrique des balises, ça marche plus
Marsh Posté le 03-05-2006 à 13:38:59
utilise des span pour l'imbrication
Comme ça ton
Code : |
Devient
Code :
|
Marsh Posté le 03-05-2006 à 15:19:14
godbout a écrit : Cool, j'ai fait un truc comme ça donc :
|
Tu peux faire un truc récursif, style :
function rec_replace($string) {
return preg_replace('#\[([ibu])](.*?)\[\/\1]#ie', '"<$1>" . rec_replace("$2" ) . "</$1>"', $string);
}
Sinon il faut gérer ça par type de balise et repasser plusieurs fois.
Marsh Posté le 04-05-2006 à 12:40:56
chaced a écrit : utilise des span pour l'imbrication
|
Je ne sais pas pourquoi, mais je sens que la blague était intense.
Marsh Posté le 04-05-2006 à 12:42:48
sielfried a écrit : Tu peux faire un truc récursif, style : |
Ok, merci pour l'info
De toute façon c'était qu'un essai, j'vais gérer que les [img] et les [url], donc je vais repasser plusieurs fois
Par contre, un p'tite question, j'capte pas la différence entre un
Code :
|
et un
Code :
|
Dans les deux j'y lis : 0 ou plusieurs occurences de n'importe quoi. J'vois pas ce que le ? vient ajouter
Marsh Posté le 04-05-2006 à 12:43:54
chaced a écrit : Qu'elle blague ? ça marche tres bien... |
C'te rapidité
Disons que la solution ne me convient pas
Marsh Posté le 04-05-2006 à 12:52:18
ReplyMarsh Posté le 04-05-2006 à 12:57:27
godbout a écrit : <strong>Je teste ça <em>tout de </em>suite.</strong> |
ce n'est pas du tout w3c ce truc
pour faire un truc comme ça :
Code :
|
il faudrait ecrire :
<b>a</b><i><b>b</b>c</i>
Marsh Posté le 04-05-2006 à 13:06:30
godbout a écrit : Ok, merci pour l'info
|
Le ? rend le * feignant ("lazy" ). Exemple simple, sur une chaîne de type : "fooBARfooBARfoo", "foo.*foo" catcherait "fooBARfooBARfoo" (la chaîne entière donc), alors que "foo.*?foo" catcherait "fooBARfoo". Autrement dit, l'étoile s'arrête au premier "foo" si elle est feignante, et au dernier si elle ne l'est pas.
Il y a aussi une option sur les fonctions preg_* pour les rendre feignantes par défaut (U je crois).
Marsh Posté le 04-05-2006 à 13:12:34
chaced a écrit : ce n'est pas du tout w3c ce truc
|
euh en quoi c'est pas W3C l'usage des balises <strong> et <em> ? Elles ont un sens, contrairement aux balises <b> et <i>, qui elles ne sont là que pour la présentation et n'ont pas de sens. Ce sont donc ces dernières qui "ne sont pas W3C".
Marsh Posté le 04-05-2006 à 13:31:07
sielfried a écrit : Le ? rend le * feignant ("lazy" ). Exemple simple, sur une chaîne de type : "fooBARfooBARfoo", "foo.*foo" catcherait "fooBARfooBARfoo" (la chaîne entière donc), alors que "foo.*?foo" catcherait "fooBARfoo". Autrement dit, l'étoile s'arrête au premier "foo" si elle est feignante, et au dernier si elle ne l'est pas. |
Ah ok, merci
J'avais déjà vu cette option de fénéantise ouais, mais j'ai cru au début que c'était pour le développeur
En fait j'avais pas compris comment l'appliquer, maintenant c'est bon, merci
Marsh Posté le 04-05-2006 à 15:20:34
J'essaye de gérer les balises [img] et [url]/[url=] en pouvant les imbriquer les unes dans les autres, ça fout à chaque fois tout en l'air
Marsh Posté le 04-05-2006 à 15:35:17
Code :
|
Voilà mon code. Mais forcément, une fois que les [img] ont été changées en <img src=, ben le regex des url ne marche pas, et ça fait tout foirer.
Marsh Posté le 14-05-2006 à 18:01:40
J'ai rajouté les "<" et ">" dans les choses à éviter, et ça marche
Par contre j'ai une autre question
En ce qui concerne le "^" dans les classes de caractères, j'aurais aimé interdire un mot complet, comment je fais ?
Est-ce que [^(mot)] est correct ?
Marsh Posté le 02-05-2006 à 14:54:51
J'me mets aux regex en essayant de gérer quelques bbcode, j'ai eu un problème, je l'ai résolu, mais je ne comprends pas pourquoi ça ne marchait pas
Voilà mon ex-code :
J'me suis retrouvé avec mes
[b]
remplacés par des
[<b>]
et il me semble mes
[/b]
par des
[</b>]
J'ai pas compris pourquoi
En ajoutant des parenthèses dans le regex comme ceci '(\[b\])' ça a marché, miraculeusement.
Where is the problem?
PS: Je tiens à préciser que j'ai lu tous les topics sur le forum et sur google.
Message édité par godbout le 02-05-2006 à 14:57:13