Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2007, 15h18   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Par défaut Recherche dans une suite de nombres

Bonjour à tous.

J'essaie depuis qq tps d'écrire une expression reguliere me permettant de rechercher une certaine suite logique ds une suite de nombre.
Je voudrais en fait trouver une suite commençant par 08 suivie de 14 chiffres et enfin 5 chiffres quelconques apres cette suite.
Cette suite logique peut se repeter jusqu'à 2 fois ds ma suite de nombre et peut aussi ne pas apparaitre.
Voici un exemple permettant de mieux comprendre :
suite de nbre : 156489531082154687945638975413256898765
suite logique recherchée :0821546879456389 75413
voici mon expression :
Code :
$expression = '(08[0-9]{14})([0-9]{5})?((08[0-9]{14})([0-9]{5})?)?'
Qd je fais :
Code :
ereg($expression,$suite_de_nbre,$code);
je ne retrouve pas les bonnes suites ds $code[1],$code[2],$code[4]et $code[5]
et des fois $code[4]et $code[5] sont vides alors qu'ils devraient être remplies.
D'où vient le pb?

Merci pour votre aide.
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 17h59   #2
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Euh c'est quoi exactement ce que tu recherches ?
avec preg_replace tu peux faire ça. Apres il faut voir ce que tu veux recuperer, par quoi tu veux remplacer etc...
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 01h11   #3
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 761
Points : 761
Je viens de faire un essai avec preg_match :

Code :
1
2
3
4
<?php
  preg_match('/(08[0-9]{14})([0-9]{5})?/', '156489531082154687945638975413256898765', $res);
  print_r($res);
?>
et le résultat est :
Code :
1
2
3
4
5
Array(
    [0] => 082154687945638975413
    [1] => 0821546879456389
    [2] => 75413
)
ce qui a priori correspond bien à ce que tu cherches ^^
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 08h02   #4
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Citation:
Envoyé par DelphiManiac Voir le message
Je viens de faire un essai avec preg_match :

Code :
1
2
3
4
<?php
  preg_match('/(08[0-9]{14})([0-9]{5})?/', '156489531082154687945638975413256898765', $res);
  print_r($res);
?>
et le résultat est :
Code :
1
2
3
4
5
Array(
    [0] => 082154687945638975413
    [1] => 0821546879456389
    [2] => 75413
)
ce qui a priori correspond bien à ce que tu cherches ^^
Oui, merci pour ton aide.En effet, ce sont bien les resultats attendus;par contre lorsque la suite se complique je n'obtiens plus les bons resultats;
exemple avec une suite de nbre contenant 2 suites logiques :
15608149735648926499742368456329870816935468795643216549875651
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 08h03   #5
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Citation:
Envoyé par Korko Fain Voir le message
Euh c'est quoi exactement ce que tu recherches ?
avec preg_replace tu peux faire ça. Apres il faut voir ce que tu veux recuperer, par quoi tu veux remplacer etc...
Je veux rechercher ma suite logique (08....) et ne rien remplacer.
Merci
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 09h42   #6
Membre chevronné
 
Avatar de cadoudal56
 
Inscription : février 2005
Messages : 671
Détails du profil
Informations personnelles :
Âge : 40

Informations forums :
Inscription : février 2005
Messages : 671
Points : 646
Points : 646
Hello,

Et si tu remplaces preg_match par preg_match_all
Ensuite tu accedes comme ceci :
Code :
1
2
3
4
5
6
 
Array(
    [0][0] => 082154687945638975413
    [0][1] => 0821546879456389
    [0][2] => 75413
)
@+
cadou
__________________
PHP Competition System
Script de gestion de coupes et championnats
http://phpcompet.free.fr

Mon jeu de foot
cadoudal56 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 14h49   #7
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Citation:
Envoyé par cadoudal56 Voir le message
Hello,

Et si tu remplaces preg_match par preg_match_all
Ensuite tu accedes comme ceci :
Code :
1
2
3
4
5
6
 
Array(
    [0][0] => 082154687945638975413
    [0][1] => 0821546879456389
    [0][2] => 75413
)
@+
cadou
Malheureusement, ça ne change rien au pb;
Le pb apparait lorsque ma suite de nb est trop longue.
En reprenant l'exemple au dessus je devrais avoir ce genre de résultat :
Code :
1
2
3
4
5
6
7
8
9
 
Array(
    [0] => 081497356489264997423
    [1] => 0814973564892649
    [2] => 97423
    [3] => 081693546879564321654
    [4] => 0816935468795643
    [5] => 21654
)
si je fais ça :
Code :
1
2
 
preg_match('(08[0-9]{14})([0-9]{5})?((08[0-9]{14})([0-9]{5})?)?', 15608149735648926499742368456329870816935468795643216549875651, $res);
Par contre mes res[3],res[4],res[5] sont vides.

Merci pour votre aide.
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 16h08   #8
Membre chevronné
 
Inscription : mars 2002
Messages : 611
Détails du profil
Informations personnelles :
Âge : 48
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : mars 2002
Messages : 611
Points : 761
Points : 761
Je comprends pas trop où est le problème !

Si sur l'exemple que je t'ai fourni, tu remplaces preg_match par preg_match_all :

Code :
1
2
3
4
5
6
<?php
  $str = '15608149735648926499742368456329870816935468795643216549875651';
  preg_match_all('/(08[0-9]{14})([0-9]{5})?/', $str, $res);
 
  print_r ($res);
?>
Résultat :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Array
(
    [0] => Array
        (
            [0] => 081497356489264997423
            [1] => 081693546879564321654
        )
    [1] => Array
        (
            [0] => 0814973564892649
            [1] => 0816935468795643
        )
    [2] => Array
        (
            [0] => 97423
            [1] => 21654
        )
)
DelphiManiac est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 08h20   #9
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Ok j'essaie et je vous tiens au courant.
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2007, 10h07   #10
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Merci, ça marche nickel avec preg_match_all

Bonne continuation et à bientot

PS: juste une petite question (dsl mais j'ai pas trouvé ds mes recherches);
j'avais utilisé cette expression '(08[0-9]{14})([0-9]{5})?((08[0-9]{14})([0-9]{5})?)?' et apparement celle-ci '/(08[0-9]{14})([0-9]{5})?/' est plus appropriée.
Je voudrais savoir à quoi sert les / en debut et fin de chaine.
Encore merci
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/09/2007, 19h49   #11
Membre chevronné
 
Avatar de Korko Fain
 
Étudiant
Inscription : août 2005
Messages : 632
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : août 2005
Messages : 632
Points : 632
Points : 632
Quand tu utilises preg_, tu utilises la syntaxe PCRE. Ce sont des expressions regulieres créées pour PERL. Ce qui entoure la regex (ici /) correspond à ce qu'on appel les délimiteurs qui permettent d'integrer dans la regex les options. Comme par exemple "i" pour le dire insensible à la case. Ou encore "s" pour dire que le metacaractère "." integre aussi les sauts de ligne etc.

Fait une recherche plus approfondie sur les PCRE sur developpez il y a de bon cours.
Korko Fain est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/09/2007, 08h04   #12
Invité de passage
 
Inscription : novembre 2006
Messages : 9
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 9
Points : 2
Points : 2
Citation:
Envoyé par Korko Fain Voir le message
Quand tu utilises preg_, tu utilises la syntaxe PCRE. Ce sont des expressions regulieres créées pour PERL. Ce qui entoure la regex (ici /) correspond à ce qu'on appel les délimiteurs qui permettent d'integrer dans la regex les options. Comme par exemple "i" pour le dire insensible à la case. Ou encore "s" pour dire que le metacaractère "." integre aussi les sauts de ligne etc.

Fait une recherche plus approfondie sur les PCRE sur developpez il y a de bon cours.
Merci pour l'info.Je ne savais pas.
Je vais suivre ton conseil et faire une recherche sur les PCRE.
alibab est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h21.


 
 
 
 
Partenaires

Hébergement Web