Php expressions regulieres
Fermé
Geff
-
28 févr. 2006 à 10:53
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 28 févr. 2006 à 20:14
kilian Messages postés 8731 Date d'inscription vendredi 19 septembre 2003 Statut Modérateur Dernière intervention 20 août 2016 - 28 févr. 2006 à 20:14
A voir également:
- Php expressions regulieres
- Easy php - Télécharger - Divers Web & Internet
- \R php ✓ - Forum PHP
- Href php ✓ - Forum PHP
- Bouton php - Forum PHP
- Echo image php ✓ - Forum PHP
3 réponses
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
28 févr. 2006 à 10:56
28 févr. 2006 à 10:56
Salut,
Premièrement, est-ce que les expressions régulières sont vraiment le meilleur moyen pour ça ? Je veux dire, tu as un entier, tu peux le tester avec des > et des < non?
Sinon tu y tiens vraiment ça devrait être un truc du genre (règle générale, je n'ai jamais fait de regexp sous php):
[0-5][0-9]
non?
Premièrement, est-ce que les expressions régulières sont vraiment le meilleur moyen pour ça ? Je veux dire, tu as un entier, tu peux le tester avec des > et des < non?
Sinon tu y tiens vraiment ça devrait être un truc du genre (règle générale, je n'ai jamais fait de regexp sous php):
[0-5][0-9]
non?
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
28 févr. 2006 à 16:55
28 févr. 2006 à 16:55
Personnelement, je transformerais toute la chaine en un tableau (dont le séparateur sera tout ce qui n'est pas un chiffre)
Puis je testerais tous ses éléments (donc les nombres) un à un.
Tu prends tout ton texte, que tu tranformes en tableau de nombres:
Et pour tout élément de $tba_num, tu fais ton test
Note trouvée sur le site de Php: preg_split est plus rapide que split....
Puis je testerais tous ses éléments (donc les nombres) un à un.
Tu prends tout ton texte, que tu tranformes en tableau de nombres:
$tab_num=split('[^0-9]', $texte);
Et pour tout élément de $tba_num, tu fais ton test
foreach ($tab_num as $num) { if ( ($num <=60) && ($num >=1) ){ //Patati, patata... } }
Note trouvée sur le site de Php: preg_split est plus rapide que split....
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 567
28 févr. 2006 à 19:46
28 févr. 2006 à 19:46
Salut kilian,
l'idée n'est pas mauvaise. En fonction des besoins je l'utilise souvent. Paradoxal elle m'a echappé en pensant aux regex et pas à la comparaison.
Voilà je me suis amusé un peu
[lamitest@localhost corbeille]$ perl 000.pl
avec grep
451255255405
avec map
45 1 25 5 25 54 05
et regex
45 dans la positon 8
1 dans la positon 26
25 dans la positon 29
5 dans la positon 31
25 dans la positon 34
54 dans la positon 40
05 dans la positon 74
l'idée n'est pas mauvaise. En fonction des besoins je l'utilise souvent. Paradoxal elle m'a echappé en pensant aux regex et pas à la comparaison.
Voilà je me suis amusé un peu
#! /usr/bin/perl use warnings; use strict; my $ch ='dsfds 45 dsfds 254 dsfsd 1-25 5,25,78,54,987 45454545 75487 et a la fin 05.'; print "avec grep\n\n"; print grep { ($_ =~ /\d+/)?( $_ >= 1 && $_ <= 60 ):1 } split(/[^0-9]/,$ch),"\n"; print "avec map\n\n"; print map { if ($_=~/\d+/ && ( $_ >=1 && $_ <= 60)) { $_ .= " "} } split(/[^0-9]/,$ch),"\n"; print "\net regex\n\n"; while ($ch =~/(?<=\D) # test arriere non chiffre ( 0? # les cas 01...09 optionnel [1-9] # les cas 1..9 | # ou [1-5][0-9] # les cas 10...59 ) (?=\D|$) # test avant non chiffre ou fin de chaine /gx) { # recherche progressive en contexte scalaire print "$1 dans la positon ",pos($ch) - 1,"\n"; }
[lamitest@localhost corbeille]$ perl 000.pl
avec grep
451255255405
avec map
45 1 25 5 25 54 05
et regex
45 dans la positon 8
1 dans la positon 26
25 dans la positon 29
5 dans la positon 31
25 dans la positon 34
54 dans la positon 40
05 dans la positon 74
kilian
Messages postés
8731
Date d'inscription
vendredi 19 septembre 2003
Statut
Modérateur
Dernière intervention
20 août 2016
1 527
28 févr. 2006 à 20:14
28 févr. 2006 à 20:14
Je commence à comprendre pourquoi on compare le perl à de la poésie...
C'est aussi illisible que beau :-)
C'est aussi illisible que beau :-)
28 févr. 2006 à 11:09
Non malheureusement, je peu pas me servir des < et > car la chaine de caractere que je cherche peut aussi bien etre un chiffre de 0 a 60 que une suite de chiffre (ex : 1,25,78,53) ou bien encore une liste ( ex: 1-56)
qd a [0-5][0-9] ca ne marche pas car cela accepte les chiffres plus grands que 59 .
ex : si je mets 54691231 ca l'accepte alors que je le souhaite pas moi !!
si t'as une idée ....
thx
28 févr. 2006 à 16:03