Qui veut relever un challenge sur les regex !

lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007 - 30 juin 2005 à 16:00
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 - 1 juil. 2005 à 14:39
Votre attention ! ! ! A tous les pros du PHP : je lance la question.
Comment transformer les lignes suivantes et n'en faire plus que 2 voire
plus qu'une ? ? ? Je voudrais bien entendu que cela produise exactement
le même résultat ! ! !

<hr size="2" width="100%"> while ( preg_match("!^[^a-zA-Z]|[^a-zA-Z0-9]$!i", $unsafe) ) {

$unsafe = preg_replace("!^[^a-zA-Z]|[^a-zA-Z0-9]$!i", "", $unsafe);

}

while ( preg_match("!(__|--)!" , $unsafe) ) {

$unsafe = preg_replace("!_+|-+!", "-", $unsafe);

}

<hr size="2" width="100%">J'ai entendu dire qu'il y avait des pros sur
ce forum ! ! ! Je vais chercher une solution moi-aussi, mais je suis
sur qu'il y a des meilleurs que moi ! ! ! C'est un petit défi !

Ce qu'il y a à gagner ? La gloire et la satisfaction d'avoir résolu un petit problème... Rien de moins ! ! !


LNP...

pour vous...



http://manuelpayet.free.fr

27 réponses

cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 juin 2005 à 20:33
Salut,



pour gagner en rapidité je te conseille de passer par preg_match_all au lieu de faire un while(preg_match())



ensuite tu ne peux pas passer ton code en une ligne ou deux.

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 juin 2005 à 21:18
$unsafe=preg_replace('/-{2,}/', '-', str_replace('_', '-', preg_replace("!^[^a-z]|[^a-z0-9]$!i", "", $unsafe)));



je crois...


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 juin 2005 à 21:19
au fait, permet moi de te dire que c'est quand même tordu comme
concours... tordu comme expression... tordu comme traitement de chaines
de caractères...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
30 juin 2005 à 21:21
hum pas bête, c'est possible que ça fonctionne effectivement.

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
30 juin 2005 à 21:32
j'ai gagné quoi ??



lol, chez moi ça fonctionne parfaitement...



ps : ton premier while ne sert à rien ^^

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 06:31
Peut-être avez-vous besoin d'explication...



La chaîne de caractères $unsafe finale doit :

>> être dépourvue de tout underscore que l'on remplace par un tiret.

>> Les double tirets doivent être remplacer par un simple tiret.

>> Le premier caractère de la chaîne doit être une lettre de l'alphabet ( avec ou sans accent )

>> Le dernier caractère de la chaîne doit être un lettre de l'alphabet ( avec ou sans accent ) ou un chiffre



Voilà le résultat souhaité doit correspondre à la description
ci-dessus... Le code le plus court et surtout le plus éfficace sera
retenu...

Alors les pros ! A vos marques ! Prêt... Partez ! ! !


Pour vous aidez faire les tests sur la chaîne suivante :

-_-_-_----_____-46zer123---_-_-_-_-_----___

La chaîne résultat doit être :

zer123



Bon courage ! ! !


LNP...

pour vous...



http://manuelpayet.free.fr
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 06:57
Je vous fais part de ma solution :

<hr size="2" width="100%"> $unsafe = eregi_replace("[^éèàêâôîûùç' a-zA-Z0-9_-]*", "", $unsafe);

while ( preg_match("!^[^a-zA-Z]|[^a-zA-Z0-9]$!i", $unsafe) ) {

$unsafe = preg_replace("!^[^a-zA-Z]|[^a-zA-Z0-9]$!i", "", $unsafe);

}

while ( preg_match("!(__|--)!" , $unsafe) ) {

$unsafe = preg_replace("!_+|-+!", "-", $unsafe);

}

$unsafe = strtoupper( $unsafe );

<hr size="2" width="100%">Elle fonctionne correctement mais je pense qu'il y a mieux ! ! ! C'est pour cela que je fais appel à vous ! ! !


LNP...

pour vous...



http://manuelpayet.free.fr
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 07:04
Réponse au message de Coucou747

Mon premier while sert justement à enlever tout les tirets en début et fin de chaîne...

Ta solution fonctionne. Mais avec la chaîne test que je vous ai
fournie, elle ne fonctionne pas et le résultat comporte toujours un
tiret comme dernier caractère. Mon script par contre rend un résultat
acceptable, mais pour le fun j'aimerai mieux mettre un script moins
long... Moins encombrant !


LNP...

pour vous...



http://manuelpayet.free.fr
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 07:20
Une meilleure solution...

<hr size="2" width="100%"> $unsafe = strtoupper( $unsafe );

$unsafe = preg_replace("![^ÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç' a-zA-Z0-9_-]*!i", "", $unsafe);

while (
preg_match("!^[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç]|[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç0-9]$!i",
$unsafe) ) {

$unsafe =
preg_replace("!^[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç]|[^a-zA-ZÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç0-9]$!i",
"", $unsafe);

}

while ( preg_match("!(__|--)!" , $unsafe) ) {

$unsafe = preg_replace("!_+|-+!", "-", $unsafe);

}

<hr size="2" width="100%">

LNP...

pour vous...



http://manuelpayet.free.fr
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juil. 2005 à 11:20
$unsafe=preg_replace('/-{2,}/', '-', str_replace('_', '-',
preg_replace("!^[^a-z]*?([a-z].*?[a-z0-9])[^a-z0-9]*?$!i", "\\1",
$unsafe)));



je persisite, ça reste con comme chalenge



et stp, ne nous fait pas part de tout tes résultats intermédiaires, on
n'en a pas besoin et ça nous fait reçevoir plein de mails...

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 11:43
Je ne vois pas pourquoi ce serait un challenge
"con" ! Et ne comprends pas pourquoi tu t'obstines à répondre à une
question si tu la trouves si elle est si conne à TES PROPRES YEUX...
Ceci dit elle n'est pas si bête cette question puisque tu n'arrive
toujours pas à y répondre... pas totalement du moins...

Je vais rester courtois comme demander dans la charte, mais ce n'est
l'envie qui me manque de m'insurger contre toi, COUCOU747, celui qui
réponds à des questions auxquelles il ne veut pas répondre... C'est un
forum ! Et public de surcroît ! Tu n'es pas chargé de faire le ménage
sur le forum, non ! ! ! Sinon cela serait écrit dans la charte qu'il ne
faut pas poser de question... s'il ne faut pas en poser ! ! ! Quelque
soit la question, je pense qu'elle doit être posée. Et si cela te
dérange tant que cela tu peux passer ton chemin...



Ce coup de gueule passé , je te remercie de participer au forum... Evites juste d'être désobligeant ! ! ! Ce n'est pas agréable de te lire ! ! !




LNP...


pour vous...





http://manuelpayet.free.fr
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juil. 2005 à 11:53
Eh calme toi, je disais ça parce-que tu nous fais produire un code inutile !



J'ai tu travail pour avoir un bon niveau en expressions régulières, et
c'est pour ça que je réponds, tu devrais essayer de te détacher de la
forme, et lire un peu plus le fond, je ne suis pas du tout énervé, je
trouve ce chalenge interessant, mais tu pourrais au moins dire à quoi
doit servir ton expression régulière, si on ne le sait pas, alors c'est
un chalenge bidon...



Tu peux faire une expression régulière pour spamer, (extraire les
adresses mails) une pour du bbcode, une pour chercher des liens
morts, une pour parser... mais celle la, je ne sais pas du tout à quoi
elle sert... C'est ça que je trouve domage, tu as bien voulu expliquer
ce qu'elle faisait, mais sans expliquer pourquoi...



désormais, mon expression fonctionne (je crois)

$unsafe=preg_replace('/-{2,}/', '-', str_replace('_', '-',
preg_replace("!^[^a-z]*?([a-z].*?[a-z0-9])[^a-z0-9]*?$!i", "\\1",
$unsafe)));


In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 12:03
Ok ! On mène un dialogue de sourd et j'espère que cela ira mieux la prochaine fois...

En fait cette regex me servira à reformater un nom et un prénom... Tout
simplement ! Je me suis un peu énervé parce que je ne comprennai pas
non plus pourquoi dans tes nombreux messages sur ce forum tu es
énervant à lire ! Alors je te demande juste de faire plus attention et
d'être plus courtois à l'avenir... Au lieu de dire que c'est un
challenge con, tu pourrais juste dire ce qui te dérange pour que l'on
puisse avancer ! ! !


LNP...

pour vous...



http://manuelpayet.free.fr
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 juil. 2005 à 12:13
Salut,



tu peux nous donner plusieurs exemples de chaînes à formater et nous
dire ce qu'il faut formater pour chaque chaîne, ou les chaines ont
toutes un masque ? bref plusieurs exemples STP, merci :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juil. 2005 à 12:13
excuses moi, j'étais quasiment certain de t'avoir demandé à quoi ça servait, et aparement, j'avais pas posté...



sinon, ça marche ?

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 juil. 2005 à 12:21
Parce que si les caractères à gauche et à droite sont identiques... un
str_replace suffit() donc merci de filer des exemples stp :-)

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 13:28
Pour vous aidez faire les tests sur la chaîne suivante :

-_-_-_----_____-46zer123---_-_-_-_-_----___

La chaîne résultat doit être :

zer123



Moi par contre j'ai déjà posté cet exemple... En fait C'est vrai que ce
n'est pas un nom mais je me pose dans le cas ou l'utilisateur est un
fou furieux et qu'il entre un peu n'importe quoi ! ! ! Te faut-il
d'autres exemples ? ? ?


LNP...

pour vous...



http://manuelpayet.free.fr
0
coucou747 Messages postés 12303 Date d'inscription mardi 10 février 2004 Statut Membre Dernière intervention 30 juillet 2012 44
1 juil. 2005 à 13:33
ça ne me dit pas en quoi ma petite ligne ne marche pas...



je ne vois pas plus simple, et franchement, ça m'étonerais qu'on trouve plus simple....

In a dream, I saw me, drop dead... U was here, U cried... It was just a deam, if I die, U won't cry, maybe, U'll be happy

http://coucou747.hopto.org
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 8
1 juil. 2005 à 13:36
"Te faut-il d'autres exemples ? ? ?"



Bah oui, tu n'as pas répondu à ma question...



Comment les chaînes peuvent-elles se présenter (sous quelle forme ?) tu n'as mis qu'un seul exemple...



Ensuite dans le cas où les chaînes se présenteraient différemment, que faut-il récupérer dans la chaîne ?

<hr size="2" width="100%">




<li>Entraide, dépannage et vulgarisation informatique: Mon site de vulgarisation informatique</li>
0
lnp Messages postés 96 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 24 octobre 2007
1 juil. 2005 à 14:03
Voilà quelques exemples ( ils sont un peu tordus mais je voudrai une
fonction vraiment blindée qui renvoie donc TOUJOURS le bon résultat ) :



fx( &é"'("é"&é"'("' ) >> ééé

fx( -_-_-_----_____-46zer123---_-_-_-_-_----___ ) >> zer123

fx( ÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç ) >> ÉÈÀÊÂÔÎÛÙÇéèàêâôîûùç

fx( ÉÈÀÊÂÔÎÛÙÇéèàêâôî-----ûùç123 ) >> ÉÈÀÊÂÔÎÛÙÇéèàêâôî-ûùç123





LNP...

pour vous...



http://manuelpayet.free.fr
0
Rejoignez-nous