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 :

Rechercher les chaines ne contenant pas un mot donné


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut Rechercher les chaines ne contenant pas un mot donné
    Bonjour,
    je veux faire un pregmatch pour rechercher toutes les chaînes qui ne contiennent pas le mot "bien"; alors je dois faire un regex comme ceci:
    preg_match('#(.*)[^bien]#',etc...)mais le problème c'est que cette regex m'apporte toutes les chaînes qui ne contiennent ni "b" ni "i" ni "e" ni "n".
    comment je doit faire?
    Merci pour votre 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
    Et si tu faisais le contraire en le niant ? :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (!preg_match('#bien#', $myString)) {
        // pas de bien ici
    }
    • 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
    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
    Je rajouterais juste \b autour de bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!preg_match('#\bbien\b#', $myString)) {
       // pas de bien ici
    }
    qui est le délimiteur de mot.

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut

    merci pour vos réponses,

    ce que je veux exactement faire c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (preg_match_all('/<a\s[^>]*href=(\s*(\"??)([^\" >]*?)\\2[^title>]*)>(.*)<\/a>/siU',$contenu,$out, PREG_SET_ORDER))
    pour obtenir toutes les balises a href qui ne contiennent pas l'attribut title .

  5. #5
    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
    Tu peux essayer de voir l'utilisation d'assertions négatives :
    http://g-rossolini.developpez.com/tu...e=page_2#LII-8

  6. #6
    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
    Une balise a ne contient pas forcément href, cela peut être une <a name="machin" title="machin">

    Une négation de ce type ne serait-elle pas suffisante ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $pattern = '#<a[^>]*\btitle\b</a>#siU';
    if ( !preg_match($pattern, $contenu) ) {
        // balise a sans title, je peux analyser son contenu
    }
    • 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

  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
    Tu peux essayer de voir l'utilisation d'assertions négatives :
    http://g-rossolini.developpez.com/tu...e=page_2#LII-8
    Ah oui, c'est vrai, du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $pattern = '#<a[^>]*(?!\btitle\b)</a>#siU';
     
    if ( preg_match($pattern, $contenu) ) {
        // balise a sans title, je peux analyser son contenu
    }
    • 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
    A peu de choses près, c'est ça. Il manque juste le fait que dans le contenu il peut y avoir plusieurs balises <a> et il ne faut ressortir que celles qui n'ont pas d'attribut title, tu utilises la balise </a> sans fermer la balise <a>, et ça ne prend pas en compte l'attribut uniquement, on pourrait avoir un href du style href="title-of-my-website" et ça passerait au travers.

    Mais dans l'idée, c'est ça.

  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
    Citation Envoyé par Bisûnûrs Voir le message
    (...)on pourrait avoir un href du style href="title-of-my-website" et ça passerait au travers.(...)
    Wé, j'y avais pensé à celle-là, mais j'avoue avoir eu un gros coup de flemme
    • 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
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    bon j' ai fais ce que je crois comprendre de vos réponses
    mais rien n'est passé regardez svp mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match_all('/<a\s[^>]*href=(\s*(\"??)([^\" >]*?)\\2[^>]*(?!\btitle\b))>(.*)<\/a>/siU',$contenu,$out, PREG_SET_ORDER))

  11. #11
    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
    (...)dans le contenu il peut y avoir plusieurs balises <a> (...)
    Je n'avais pas relevé ça, mais c'est pas un peu tordu ?
    Comment identifier la bonne cible ?
    Bref, ce cas ne devrait pas arriver il me semble.
    • 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

  12. #12
    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
    A saramery de nous dire à quoi correspond son contenu, s'il contient par exemple l'ensemble d'une page HTML avec plusieurs balises <a>, ou si son contenu ne contient qu'une et une seule balise <a>.

  13. #13
    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
    Et ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#<a[^>]*\bhref=\"[^"]+"(?!\btitle\b)</a>#siU'
    Attention, il s'agit d'un "lookahead", c'est à dire que nous considérons que si title il y a, il ne peut être qu'après le href.
    • 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

  14. #14
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    A saramery de nous dire à quoi correspond son contenu, s'il contient par exemple l'ensemble d'une page HTML avec plusieurs balises <a>, ou si son contenu ne contient qu'une et une seule balise <a>.
    mon contenu correspond à l'ensemble d'une page HTML avec plusieurs balises
    <a>.et je veux traiter seulement celles qui ne contiennent pas l'attribut title

  15. #15
    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 saramery Voir le message
    mon contenu correspond à l'ensemble d'une page HTML avec plusieurs balises
    <a>.et je veux traiter seulement celles qui ne contiennent pas l'attribut title
    Voui, mais il faut en savoir un peu plus :
    - la page est-elle validée xhtml, donc avec toutes ses balises fermantes ?
    - le cas bizarre des liens imbriqués est-il possible ?
    etc...
    • 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

  16. #16
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Voui, mais il faut en savoir un peu plus :
    - la page est-elle validée xhtml, donc avec toutes ses balises fermantes ?
    - le cas bizarre des liens imbriqués est-il possible ?
    etc...
    oui pour les deux question
    lorsque j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match_all('/<a\s[^>]*href=(\s*(\"??)([^\" >]*?)\\2(?!\btitle\b)[^>]*)>(.*)<\/a>/siU',$contenu,$out, PREG_SET_ORDER))
    il m'affiche toutes les balises <a> soit contenant l'attribut title ou non alors je veux seulement celles qui ne contiennent pas l'attribut title et je dis attribut parce qu' il m'importe de trouver le title dans un autre endroit dans le contenu

  17. #17
    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
    Et que donne le pattern que je t'ai donné un peu plus haut ?
    • 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

  18. #18
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Et que donne le pattern que je t'ai donné un peu plus haut ?
    en faisant ce que tu m'a dit je dois faire comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(preg_match_all('/<a\s[^>]*\bhref\"=(\s*(\"??)([^\" >]*?)\\2(?!\btitle\b)[^>]*)>(.*)<\/a>/siU',$contenu,$out, PREG_SET_ORDER))
    mais il me donne rien

  19. #19
    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
    Nan, juste celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#<a[^>]*\bhref=\"[^"]+"(?!\btitle\b)</a>#siU'
    • 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

  20. #20
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par jml94 Voir le message
    Nan, juste celui là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = '#<a[^>]*\bhref=\"[^"]+"(?!\btitle\b)</a>#siU'
    il me donne rien lui aussi

Discussions similaires

  1. [XL-2010] Rechercher les chaines de caracteres contenant une valeur
    Par Smix007 dans le forum Excel
    Réponses: 8
    Dernier message: 05/12/2012, 12h46
  2. Réponses: 25
    Dernier message: 18/10/2012, 17h57
  3. [RegEx] [PCRE] Trouver les lignes ne contenant pas un mot
    Par NinjDS dans le forum Langage
    Réponses: 8
    Dernier message: 14/05/2012, 16h28
  4. Réponses: 2
    Dernier message: 27/04/2012, 17h44
  5. [RegEx] rechercher une phrase ne contenant pas le mot.
    Par pdelorme dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2009, 22h28

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