$regex : au secours :(

Résolu
Signaler
Messages postés
879
Date d'inscription
vendredi 22 octobre 2004
Statut
Membre
Dernière intervention
29 juin 2007
-
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
-
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

Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
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
Messages postés
246
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
9 janvier 2006

$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
_____________________________________
Messages postés
343
Date d'inscription
dimanche 30 novembre 2003
Statut
Membre
Dernière intervention
19 août 2006
1
J'ai une maigre expérience des regex mais bon essaie celui ci : if ($regex($1-,^(#)?))

Cordialement : tebonb
Messages postés
85
Date d'inscription
mercredi 3 novembre 2004
Statut
Membre
Dernière intervention
6 janvier 2008

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

Je m'excuse...
$regex($1-,/^#[\w+|\d+]$/g)
Sans le $ il prendra des espaces :x
Messages postés
246
Date d'inscription
samedi 1 novembre 2003
Statut
Membre
Dernière intervention
9 janvier 2006

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
_____________________________________
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
no pb tidds, ca se vaut =)

PaDa
Messages postés
879
Date d'inscription
vendredi 22 octobre 2004
Statut
Membre
Dernière intervention
29 juin 2007

Merci de vos réponses très constructives :)
Messages postés
231
Date d'inscription
mercredi 12 février 2003
Statut
Membre
Dernière intervention
7 juillet 2009

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" />
Messages postés
1804
Date d'inscription
mardi 15 juillet 2003
Statut
Membre
Dernière intervention
22 septembre 2009
5
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