Rechercher : dans
Par :

Php expressions regulieres

Dernière réponse le 28 fév 2006 à 20:14:14 Geff, le 28 fév 2006 à 10:53:13 
 Signaler ce message aux modérateurs

Bonjour,

Voila, j'ai un petit probleme qui se pose a moi !!


J'essaye avec les espressiosn regulieres en PHP de trouver un nombre entre 1 et 60.

J'ai donc essayé pleins de trucs depuis 1h comme

[0-59]
([0-5]?/d{1}
(1|2|3|4|5)/d
.......

en gros ce ne sont que 2,3 petits exemples de ce que j'ai testé, mais cela ne marche pas du tout car qd je tappe 78413 par exemple ca me le laisse passer !!

je sais que c tout bete, mais si quelqu'un pouvait m'eclirer la lanterne !!


merci a toute !!

Meilleures réponses pour « php expressions regulieres » dans :
PHP - Expressions régulières Voir Qu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
[RegExp] Récupérer une adresse IP VoirFinalité Mise en œuvre Explications Interprétation du motif Récupérer une adresse IP Finalité Pour récupérer une IP dans un fichier texte, fichiers journaux, pages web, etc. Mise en œuvre L'expression régulière suivante combinée à la...
Javascript - L'objet RegExp VoirLes particularités de l'objet RegExp L'objet RegExp est un objet permettant de manipuler des expressions régulières, c'est-à-dire des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, afin de trouver des...

1

teebo, le 28 fév 2006 à 10:56:30

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?
La vérité pure et simple ?
La vérité est rarement pure et jamais simple.

O.Wilde

Répondre à teebo

2

geff, le 28 fév 2006 à 11:09:04

Merci de ton aide !!

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

Répondre à geff

3

lami20j, le 28 fév 2006 à 16:03:37

Essaie ça, je n'ai pas tester et je ne sais pas si en php on peut utiliser \D (peut être remplacé avec [^0-9]

\D(0?[1-9] | [1-5][0-9])\D

Répondre à lami20j

4

kilian, le 28 fév 2006 à 16:55: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:

$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....

Répondre à kilian

5

lami20j, le 28 fév 2006 à 19:46:29

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

#! /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

Répondre à lami20j

6

 kilian, le 28 fév 2006 à 20:14:14

Je commence à comprendre pourquoi on compare le perl à de la poésie...

C'est aussi illisible que beau :-)

Répondre à kilian