Y a-t-il un dieu des expressions régulières dans la salle? [Perl] - Perl - Programmation
Marsh Posté le 02-12-2002 à 13:48:55
xlA a écrit a écrit : Honnêtement... Je pense que oui merci qd même pour la tentative |
ben en fait y a que le premier "-" et le "_" ou je susi pas sur de la signification
mais sinon le reste a prioris g juste...
Marsh Posté le 02-12-2002 à 14:22:28
Me semble que ce qu'a dit djtoz est pas loin de la vérité.
Seule différence, ce qui est en gras:
1) doit commencer par un /
2)ensuite, chaîne pouvant contenir des chiffres entre 1 et 9, des caractères entre a et z, et/ou des - et/ou des _, le tout en quantité infinie...
3)/
4)fin à choix
Donc
/abc_123-zz/xxx par exemple, serait correct.
Ce qu'il y a entre [] n'indique pas un ordre d'apparition, mais les caractères possibles.
J'epère que c'est clair
Bref : chemin de fichiers...
Edit : par contre je sais pas ce qu'est le m# (connais rien en Perl )
Marsh Posté le 02-12-2002 à 14:37:03
ben le m veut dire match, donc ce qui va matcher la regex
et pis par defaut c'est le caractere "/" qui delimite la regex, mais tu peut en utiliser d'autre et dans ce cas la, ben c'est le "#" qui sert de delimiteur.
Marsh Posté le 02-12-2002 à 14:40:00
djtoz a écrit a écrit : ben le m veut dire match, donc ce qui va matcher la regex et pis par defaut c'est le caractere "/" qui delimite la regex, mais tu peut en utiliser d'autre et dans ce cas la, ben c'est le "#" qui sert de delimiteur. |
tu es une perl(e)
Marsh Posté le 02-12-2002 à 15:02:02
^ = début de l'expression à tester (ce qui suit le ^ = le premier caractère à tester)
$ = fin de l'expression à tester
Marsh Posté le 02-12-2002 à 17:43:55
deliriumtremens a écrit a écrit : ^ = début de l'expression à tester (ce qui suit le ^ = le premier caractère à tester) $ = fin de l'expression à tester |
petite precision
^ ca correspond au debut de la ligne
et $ la fin de la ligne
c'est peut etre ce que tu voulais dire, mais alors j'ai mal compris et je m en excuse par avance
pis juste pour info le "m" n'est pas necessaire ds ce cas.
Marsh Posté le 04-12-2002 à 08:18:01
Tiens, en parlant de "dieu des RegExp", si y en a un qui pouvait me donner la RegExp au problème suivant :
$toto contient une chaîne contenant des espaces éventuels et des chiffres
quand par exemple $toto contient ceci " 1224 ", je veux récupérer "1224"
quand $toto contient " 1 2 3 4 ", je veux récupérer "1 2 3 4"
j'ai fait qq tests mais c'est pas tjs concluant, qqun a la solution ?
Marsh Posté le 04-12-2002 à 08:38:58
Aricoh a écrit a écrit : Tiens, en parlant de "dieu des RegExp", si y en a un qui pouvait me donner la RegExp au problème suivant : $toto contient une chaîne contenant des espaces éventuels et des chiffres quand par exemple $toto contient ceci " 1224 ", je veux récupérer "1224" quand $toto contient " 1 2 3 4 ", je veux récupérer "1 2 3 4" j'ai fait qq tests mais c'est pas tjs concluant, qqun a la solution ? |
my ($recup) = $toto =~ /^\s*(.*)\s*$/
essai ca
Marsh Posté le 04-12-2002 à 08:53:42
merci pour ta propal mais ça donne les mêmes résultats que chez moi, exemple de code :
Code :
|
Le retour de l'analyse écrite dans le log donne ça :
Code :
|
Mon blème, les espaces devant le 1er chiffre, ça roule je les récupère pas, par contre je conserve les espaces APRES le dernier nombre, ça marche pas comme je veux
Marsh Posté le 04-12-2002 à 10:14:18
bah alors djtoz, t passé où ?
y a personne qu'a la soluce ?
Marsh Posté le 04-12-2002 à 10:50:41
ben c normal! tu prends tout ds ta regexp!
mets plutôt un truc genre (\d+) au lieu de (.*)
Marsh Posté le 04-12-2002 à 10:50:42
Aricoh a écrit a écrit : bah alors djtoz, t passé où ? y a personne qu'a la soluce ? |
ben si c tjours 1224:
my ($recup) = $toto =~ /^\s*(1.*4)\s*$/
Marsh Posté le 04-12-2002 à 10:58:13
arghbis a écrit a écrit : ben c normal! tu prends tout ds ta regexp! mets plutôt un truc genre (\d+) au lieu de (.*) |
oue mais la si y a des espaces entre les nombres, ca va po le faire
Marsh Posté le 04-12-2002 à 11:03:08
certes, mais je donne une piste, y peut chercher qd même non??
sinon : (\s*(\d+)\s*)+ ça marche
Marsh Posté le 04-12-2002 à 11:03:14
djtoz a écrit a écrit : ben si c tjours 1224: my ($recup) = $toto =~ /^\s*(1.*4)\s*$/ |
ben non, les chiffres sont aléatoires
En fait, il faut que je récupère ces chiffres, et tester si c'est bien des int
Ainsi, si j'ai trouvé "1224", conversion en int OK
Si je trouve "1 2 24", ben là c'est pas OK
C'est ça qu'il faut que je vérifie au final mais avant tout, je dois me débarrasser de tous les espaces AVANT et APRES cette chaîne.
Pour l'instant, je fais comme ça :
Code :
|
Avec ça, si au départ j'ai " 12 24 ", au final je récupère bien ce que je veux, c-a-d "12 24"
Seulement, c'est pas tip top niveau syntaxique ni en tps de traitement car mon blème, c'est que des vérifs de valeur comme celle-ci, j'en ai une bonne centaine à faire !
Marsh Posté le 04-12-2002 à 11:38:17
bon c pas non plus tip top
mais celle la elle marche
/^\s*(\d[\s*|\d]+\d)\s*$/
Marsh Posté le 04-12-2002 à 11:38:53
djtoz a écrit a écrit : bon c pas non plus tip top mais celle la elle marche /^\s*([\s*|\d]+\d)\s*$/ |
attend, je teste tout d'suite !
Marsh Posté le 04-12-2002 à 11:42:03
djtoz a écrit a écrit : bon c pas non plus tip top mais celle la elle marche /^\s*(\d[\s*|\d]+\d)\s*$/ |
yes yes YES !!!
Ca donne ça en retour :
Ligne 1 = "1224"
Ligne 2 = "1224"
Ligne 3 = "1 224"
Ligne 4 = "12 24"
Ligne 5 = "122 4"
Ligne 6 = "1 2 24"
Ligne 7 = "1 2 2 4"
Ligne 8 = "1 2 2 4"
Ligne 9 = "12 2 4"
Ligne 10 = "12 24"
Ca marche mais j'ai pas tout capté à ta RegExp, merci gars !
Marsh Posté le 04-12-2002 à 11:46:42
Aricoh a écrit a écrit : yes yes YES !!! Ca donne ça en retour : Ligne 1 = "1224" Ligne 2 = "1224" Ligne 3 = "1 224" Ligne 4 = "12 24" Ligne 5 = "122 4" Ligne 6 = "1 2 24" Ligne 7 = "1 2 2 4" Ligne 8 = "1 2 2 4" Ligne 9 = "12 2 4" Ligne 10 = "12 24" Ca marche mais j'ai pas tout capté à ta RegExp, merci gars ! |
/^\s*(\d[\s*|\d]+\d)\s*$/
ben en fait
^\s* : les premier espaces (zero ou plusieurs)
(\d : un nombre
[\s*|\d]+ : soit zero ou plusieurs espaces ou alors un nombre (repete une fois ou plusieurs)
\d) un nombre
\s*$ : les derniers espaces
voilou
Marsh Posté le 02-12-2002 à 12:05:12
tous ce qui commence par un "/" suivi d'un "-" apres un nombre entre "1" et "9" puis une lettre en minuscule entre "a" et "z" et un "_", tous ca repete zero ou plusieurs fois.
ensuite un autre "/" et puis n'importe quoi apres jusqu'a la fin
tu recupere ds $1 ce qu'il y a avant le 2eme "/" et ds $2 ce qu'il y a apres
bon suis sur que me suis gourre quelques part...