$regex : au secours :(

Résolu
MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007 - 25 janv. 2005 à 20:37
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 - 29 janv. 2005 à 00:25
Je voudrais faire un truc assez simple avec des $regex : vérifier si le premier caractère de $1- est bien # ; et ensuite vérifier si # est présent seulement une fois dans $1- . Or, j'ai lu un tuto qui dit ça :

Méta-caractère ?
Zéro ou une seule occurrence.


$regex(hello,e?) retourne 1
$regex(hello,r?) retourne 1

ça d'accord, mais $regex(leet,e?) retourne 1 alors que "e" est présent 2 fois. Donc meme probleme pour mon nom de chan : $regex($1-,^#?) ne fonctionne pas : retourne toujours 1 meme quand # est présent 2 fois :|

Au secours !

Merci de votre aide ! MaX_62

10 réponses

cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
25 janv. 2005 à 22:13
non Fearless, soit c des classes auquelles cas ton
"|" nest pas un ou (et dans ce cas je pige pas) soit c'est un ou et
faut des parenthèses.

pour ta question voila :



vérifier si le premier caractère de $1- est bien # ; et ensuite vérifier si # est présent seulement une fois dans $1-



en gros ca veut dire que # est présent qu'en première position de $1- non ? si oui fais ca :

$regex($1-,^#[^#]+$)

décomposition : ^ début, # dièse, [^#] autre chose qu'un dièse, "+"
pour dire que le autre chose qu'un dièse est répété une fois ou
plusieurs autant qu'on veut, et "$" pour "fin de chaine"



au cas ou j'ai mal compris (-> un dièse en début puis un dièse dans la chaine pas plus (donc zero ou un))

$regex($1-,^#[^#]+#?[^#]+$) (qui fonctionne de la même facon), le "?" sert a dire "zero ou un"



enfin pour le tuto :

$regex(leet,e?) retourne 1 alors que "e" est présent 2 fois.


ca marche car tu demandes "y a il un ou zero "e"
dans leet : la réponse est oui ! par défaut, il faut bien comprendre
que les regex ca vérifie si un truc "est dans" la chaine recherchée...



PaDa
3
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006
25 janv. 2005 à 22:14
$regex($1-,^#[^#]*$)

Explications :

^ ... $ annonce le début et la fin de la chaîne
# signale qu'il faut un # au début de la chaîne
[^#] représente n'importe quel caractère différent de #, ça peut être "a", "b", "c", etc mais pas "#"
* étend cette restriction à tous les caractères qui suivent (s'il en existe)

_____________________________________

Tidds alias moo alias Oni_Baka
Voilà, plus d'ambiguité possible. :]

World is moo
_____________________________________
3
talking Messages postés 343 Date d'inscription dimanche 30 novembre 2003 Statut Membre Dernière intervention 19 août 2006 1
25 janv. 2005 à 21:23
J'ai une maigre expérience des regex mais bon essaie celui ci : if ($regex($1-,^(#)?))

Cordialement : tebonb
0
FearlessKire Messages postés 85 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 6 janvier 2008
25 janv. 2005 à 21:56
Essaye :
$regex($1-,/^#[\w+|\d+]/g)
Ya peut-etre plus simple mais bon...
0

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

Posez votre question
FearlessKire Messages postés 85 Date d'inscription mercredi 3 novembre 2004 Statut Membre Dernière intervention 6 janvier 2008
25 janv. 2005 à 21:57
Je m'excuse...
$regex($1-,/^#[\w+|\d+]$/g)
Sans le $ il prendra des espaces :x
0
tidds Messages postés 246 Date d'inscription samedi 1 novembre 2003 Statut Membre Dernière intervention 9 janvier 2006
25 janv. 2005 à 22:17
Pada, j'avais mis + aussi, seulement si $1- = #pwet, ça retournera 1 mais si $1- = # ça retournera 0. :)

_____________________________________

Tidds alias moo alias Oni_Baka
Voilà, plus d'ambiguité possible. :]

World is moo
_____________________________________
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
25 janv. 2005 à 22:19
no pb tidds, ca se vaut =)

PaDa
0
MaX_62 Messages postés 879 Date d'inscription vendredi 22 octobre 2004 Statut Membre Dernière intervention 29 juin 2007
26 janv. 2005 à 07:05
Merci de vos réponses très constructives :)
0
Hades53 Messages postés 231 Date d'inscription mercredi 12 février 2003 Statut Membre Dernière intervention 7 juillet 2009
29 janv. 2005 à 00:23
Je ne vois pas vraiment l'utilité d'utiliser une regex pour un traitement aussi facile.
Ca peut être fait de diverses façons:

$iif($left($1-,1) != $chr(35) || $chr(35) isin $mid($1-,2),0,1)
ou encore
$iif($left($1-,1) != $chr(35) || $count($1-,$chr(35)) != 1,0,1)
Pourquoi faire compliqué quand on peut faire simple...<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />
0
cs_PaDa Messages postés 1804 Date d'inscription mardi 15 juillet 2003 Statut Membre Dernière intervention 22 septembre 2009 6
29 janv. 2005 à 00:25
Pour répondre à la question, ou aussi parce qu'avec
l'habitude un masque unique de regex est plus facile a relire que deux
conditions avec 3-4 arguments dont il faut re-chercher la signification
a posteriori...

Mais c'est vrai que niveau efficacité, c'est pas forcément mieux :p

PaDa
0
Rejoignez-nous