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 :

Mot interdit, exclusion d'une chaine de caractères [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut Mot interdit, exclusion d'une chaine de caractères
    Bonjour à tous,
    J'aimerais savoir quelle regex utiliser pour effectuer une exclusion.
    Par exemple, ne pas retenir la chaîne où figure le mot "truc".
    Merci d'avance pour votre aide

  2. #2
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (!preg_match('/truc/i', $str)) {
         echo $str;
    } else {
         echo "Cette phrase contient un mot interdit et ne sera pas affichée.";
    }

  3. #3
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    tu n'as pas besoin d'expressions régulières pour ça, tu peux faire le test avec la fonction http://php.net/strpos
    GNAP !

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Merci pour la rapidité de vos réponses mais en fait je veux la regex inverse de /truc/i . En fait je travaille sur un interpréteur langage naturel->expressions régulières, donc je suis obligé d'utiliser des regex.

  5. #5
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par Finnegans Voir le message
    Merci pour la rapidité de vos réponses mais en fait je veux la regex inverse de /truc/i .
    Matcher ce qui ne contient pas "truc" alors ?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par darkstar123456 Voir le message
    Matcher ce qui ne contient pas "truc" alors ?
    Exactement!

  7. #7
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par Finnegans Voir le message
    Exactement!

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Ca ne marche pas

  9. #9
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    Citation Envoyé par Finnegans Voir le message
    Ca ne marche pas
    on peut voir ton code ? =)

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (@preg_match($motif, $chaine)
        echo "<p class='vrai'>La cha&icirc;ne &laquo; $chaine &raquo; correspond au motif &laquo; $motif &raquo;.</p>\n";
        else echo "<p class='faux'>La cha&icirc;ne &laquo; $chaine &raquo; ne correspond pas au motif &laquo; $motif &raquo;.</p>\n";
        break;
    En gros, c'est un "preg_match" normal entre motif et chaîne.

  11. #11
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    bah j'vais répondre avec ce que tu nous donnes alors....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $motif = "/truc/i";
    if (preg_match($motif, $str)) {
        echo "truc existe";
    }

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Oui mais on peut pas faire l'inverse de ça ? Ce serait un truc comme [^truc] mais pas pour les caractères "t" "r" "u" "c", plutôt pour le mot "truc". Parce qu'en fait, je vais intégrer un interpréteur dans une application qui gère les regexp. Donc moi je n'utilise que des "preg_replace", je ne peux pas faire par exemple "!preg_match".

  13. #13
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    alors

    1] pourquoi nous montrer un preg_match() ?
    2] pourquoi en réalité ne rien nous montrer pcq écrire preg_match($motif, $chaine), j'avais pareil sur PHP Manual
    3] des exemples, du concret vallent mieux qu'un long discours.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    1&2: Tu m'as demandé du code et je n'ai que ce bout là à montrer vu qu'avant d'écrire la regex en code, je dois tester si elle marche ou pas (en preg_match)
    3: exemple concret :
    chaine = "j'ai un chat blanc"
    si le mot "blanc" est dans la phrase preg_match renvoie false sinon true

  15. #15
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    d'après ton exemple, je vois pas ou est le probleme ou alors il tient pas debout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $str = "j'ai un chat blanc qu'il est tout mimi";
    $pattern = "/blanc/i";
    echo preg_match($pattern, $str);
    ?>
    mais on en revient toujours au même... je me demande si tu t'embrouille pas l'esprit dans ton code. Un match est fait pour matcher/trouver quelque chose et pas pour trouver quelque chose qui n'existe pas
    Pareil pour les replace... comment remplacer quelque chose qui ne doit PAS s'y trouver ? Oo

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Dans ce code-ci, je suis tout à fait d'accord avec toi, la chaîne match et ya pas de problème. Mais moi dans mon cas, j'ai une liste d'articles, et je dois pouvoir fournir à l'utilisateur une regex qui lui permettrait d'afficher les articles qui ne comportent pas tel mot. Donc je ne cherche pas à implémenter un code qui ferait ça, ce n'est pas le but de ma requête, mais je cherche une regex qui le ferait.
    Je sens tout de même que je t'ai ennuyé avec mon problème, donc si vraiment ca te fait perdre ton temps, ce n'est pas grave.
    En tout cas merci!

  17. #17
    Membre émérite Avatar de darkstar123456
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 1 896
    Points : 2 835
    Points
    2 835
    Par défaut
    beeen....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    i<?php
    $articles = array ("un petit chat se balade sur la route",
    				   "une souris verte, qui courrait dans l'herbe...",
    				   "salut ! ça va mon p'tit chat ?");
    $pattern = "/souris/i";
    foreach ($articles AS $k => $v) {
    	if (!preg_match($pattern, $v)) {
    		echo "<p>$v</p>";
    	}
    }
    ?>
    On ne veut pas les articles avec "souris", il affichera :
    un petit chat se balade sur la route
    salut ! ça va mon p'tit chat ?

  18. #18
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 83
    Points : 69
    Points
    69
    Par défaut
    Bonsoir,

    j'ai le même problème que Finnegans : je souhaiterais interdire non pas un caractère ou une classe de caractères mais un mot entier. Voici à quoi ressemble mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all("#\"(\d{2}:\d{2})\"\s+[^$mot_interdit][^\.]*?\b$mot\b#is", $chaine, $matches, PREG_SET_ORDER);
    Je trouve ça curieux qu'il n'y ait pas de solution toute faite, du genre [^mot_interdit]...

    merci d'avance pour toute idée !

  19. #19
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 35
    Points : 17
    Points
    17
    Par défaut
    Il me semble qu'avec cette regex, ça devrait marcher :
    #^((?!mot).)*$#

    Chaque chaîne comportant le mot "mot" ne sera pas matchée si on fait un preg_match avec ce motif.

  20. #20
    Membre du Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2009
    Messages : 83
    Points : 69
    Points
    69
    Par défaut
    Merci Finnegans, mais je n'arrive pas à faire fonctionner #^((?!mot).)*$#
    Tu y arrives toi ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 1
    Dernier message: 14/01/2011, 13h46
  3. [RegEx] Exclusion d'une chaine de caractères
    Par omageus dans le forum Langage
    Réponses: 3
    Dernier message: 31/07/2009, 15h39
  4. Réponses: 2
    Dernier message: 13/08/2006, 23h56
  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