IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

recherche de caractères dans une chaine


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut recherche de caractères dans une chaine
    Bonjour à tous,

    Je suis nouveau dans le domaine de php et j'ai le problème suivant:

    Je dois rechercher la présence d'un certain nombre de caractères dans une
    chaine, je m'explique , j'ai les caracteres suivants à rechercher : aZsh dans la
    phrase suivante :

    Abcbcbc jjjdddjjjd ZZZZjdjdjd => résultat : je ne veux pas de cette phrase

    Autre cas :
    ajjdbbjkkd kkjjzzzeijijz jhsteydujjs ddhhsuzs : je veux cette phrase :
    | | | |
    car les 4 caractères existent bien dans la phrase et dans l'ordre

    Le nombre de caractères à rechercher est variable, ils peuvent êtres
    espacés, séparés ou non.
    J'ai bricolé en les mettant dans une table avec pour résultat a.*Z.*s.*h et
    j'ai utilisé celà avec eregi mais il semble ne pas trouver de concordance.
    Peut-être existe-t'il un autre moyen plus simple??

    Merci pour toute aide

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par schuller Voir le message
    (...)
    ajjdbbjkkd kkjjzzzeijijz jhsteydujjs ddhhsuzs : je veux cette phrase :
    | | | |
    car les 4 caractères existent bien dans la phrase et dans l'ordre
    (...)
    Bah non, c'est pas le bon ordre : le h arrive avant le s
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Pour être plus clair
    Rebonjour à tous,
    je vais essayer de mettre un exemple plus clair, je dois repérer
    la suite VMMIX dans les phrases suivantes :
    1) PRIS A MIDI, PENDU A UNE HEURE (non, pas la bonne phrase)
    2) IN PRINCIPIO ERAT VERBUM (non, pas la bonne phrase)
    3) Le temps qui passe est un autre thème favori des penseurs. La pensée est plus banale, mais il ya de multiples façons de l'exprimer

    La phrase numéro 3 m'intéresse car il y a bien vmmix dans l'ordre recherché
    le v dans favori, le m dans mais, le i dans mais et le x dans exprimer, dans
    l'ordre demandé par la variable vmmix

    Si cela permet d'éclairer un peu

    Merci

  4. #4
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( preg_match( '#V.*M.*M.*X.*I#Ui', $myString ) ) {
      echo 'ok';
    }

  5. #5
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if ( preg_match( '#V.*M.*M.*X.*I#Ui', $myString ) ) {
      echo 'ok';
    }
    Bonjour,

    Je dirais même plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $pattern = '#v[^m]*m[^x]*x[^i]*i#Ui'
    if ( preg_match( $pattern, $myString ) ) {
      echo 'ok';
    }
    Un peu d'optimisation ne fait pas de mal...
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  6. #6
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Bonjour,

    Je dirais même plus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $pattern = '#v[^m]*m[^x]*x[^i]*i#Ui'
    if ( preg_match( $pattern, $myString ) ) {
      echo 'ok';
    }
    Un peu d'optimisation ne fait pas de mal...
    Salut,

    Y a-t-il une différence entre ton code et le mien (qui donnent le même résultat) ?
    Dans ton cas, tu dis que tu veux un caractère v suivi de n'importe quel caractère sauf le m, jusqu'au prochain m (un peu contradictoire non ?).
    Dans mon cas, je dis que je veux un caractère v suivi de n'importe quel caractère jusqu'au prochain m. Ce qui au final revient exactement au même. La différence se situerait-elle au niveau temps d'exécution (flemme de faire un benchmark ) ?

  7. #7
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Salut,

    Y a-t-il une différence entre ton code et le mien (qui donnent le même résultat) ?
    Dans ton cas, tu dis que tu veux un caractère v suivi de n'importe quel caractère sauf le m, jusqu'au prochain m (un peu contradictoire non ?).
    Dans mon cas, je dis que je veux un caractère v suivi de n'importe quel caractère jusqu'au prochain m. Ce qui au final revient exactement au même. La différence se situerait-elle au niveau temps d'exécution (flemme de faire un benchmark ) ?
    Oui le résultat est exactement le même et il s'agit juste d'une différence de perfs potentielles.
    Et c'est tout sauf contradictoire, ça permet de contrôler le quantifier * au doigt et à l'oeil. En effet, si je lui dis "n'importe quel caractère sauf un m", il n'a pas besoin de connaître le reste de la regex pour faire le matching.
    Ceci dit, moi aussi j'ai la flemme de faire un bench !
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Bon, j'ai quand même pris le temps de le faire et le résultat est sans appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $myString = 'Le temps qui passe est un autre thème favori des penseurs. La pensée est plus banale, mais il ya de multiples façons de l\'exprimer';
     
    $t0 = microtime( true );
     
    for ( $i = 0; $i < 100000; $i++ ) {
      preg_match( '#v.*m.*x.*i#Ui', $myString );
    }
     
    echo round( ( microtime( true ) - $t0 ) * 1000 ); // ~4100 ms
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $myString = 'Le temps qui passe est un autre thème favori des penseurs. La pensée est plus banale, mais il ya de multiples façons de l\'exprimer';
     
    $t0 = microtime( true );
     
    for ( $i = 0; $i < 100000; $i++ ) {
      preg_match( '#v[^m]*m[^x]*x[^i]*i#Ui', $myString );
    }
     
    echo round( ( microtime( true ) - $t0 ) * 1000 ); // ~610 ms

  9. #9
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Merci, ça c'est du service après-vente !
    Je dois dire que je suis épaté de la différence, parce que j'avais volontairement passé sous silence le caractère ungreedy de la regex qui tempère un peu ce que j'avais dit.
    Je vais me coucher moins con ce soir, c'est une bonne journée !
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  10. #10
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Merci à tous
    Grand merci pour vos réponses ainsi que pour les explications fournies,
    mon programme tourne super.
    Vourriez-vous m'indiquer ce que signifient les "jokers" mis un un pattern
    comme dans #v[^m]*m[^x]*x[^i]*i#Ui,
    je suppose que i veut dire majuscule et minuscules mais pour le
    reste, je ne vois pas trop bien. Si vous connaissez un site qui
    explique ça , je suis preneur.
    Encore merci pour l'aide

  11. #11
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 868
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 868
    Points : 16 258
    Points
    16 258
    Par défaut
    Un site qui aurait des tutoriels sur le PHP ? Developpez.com peut-être ?
    http://g-rossolini.developpez.com/tu...e=page_2#LII-7

  12. #12
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Sans oublier le meilleur livre que j'ai jamais lu sur le sujet : "Maîtrise des expressions régulières" (@bisunurs : mon optimisation c-dessus en est tirée par exemple)

    http://www.amazon.fr/Ma%C3%AEtrise-e...8378895&sr=8-7

    Si vous pouvez mettre la main dessus en français, ne vous gênez surtout pas : la maison d'édition arrête les traductions et ce bouquin en français deviendra une perle rare.
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  13. #13
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Maîtrise des expressions régulières
    J'ai essayé de trouver l'ouvrage "Maîtrise des expressions régulières" mais impossible,
    je l'ai vu sur un site suisse mais je vais voir s'il leur en reste et surtout
    s'ils acceptent de l'envoyer en France. Par contre j'en ai vu d'autres qui
    semblent traiter le même sujet , je vais explorere un peu de ce côté.
    Merci à tous

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rechercher un caractère dans une chaine.
    Par Milyshyn76 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 27/05/2009, 09h19
  2. Recherche de caractère dans une chaine
    Par Maestro57 dans le forum Langage
    Réponses: 8
    Dernier message: 05/07/2007, 14h59
  3. Réponses: 4
    Dernier message: 07/12/2006, 11h01
  4. [RegEx] recherche et replacement dans une chaine de caractère
    Par Ekimasu dans le forum Langage
    Réponses: 5
    Dernier message: 28/11/2006, 21h39
  5. recherche de mots dans une chaine de caractères
    Par jeanfrancois dans le forum Langage
    Réponses: 5
    Dernier message: 10/02/2006, 10h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo