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
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
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."; }
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 !
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part /(.*)[^truc|blabla]/i
En gros, c'est un "preg_match" normal entre motif et chaîne.
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îne « $chaine » correspond au motif « $motif ».</p>\n"; else echo "<p class='faux'>La chaîne « $chaine » ne correspond pas au motif « $motif ».</p>\n"; break;
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"; }
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".
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.
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
d'après ton exemple, je vois pas ou est le probleme ou alors il tient pas debout.
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
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); ?>
Pareil pour les replace... comment remplacer quelque chose qui ne doit PAS s'y trouver ? Oo
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!
beeen....
On ne veut pas les articles avec "souris", il affichera :
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>"; } } ?>
un petit chat se balade sur la route
salut ! ça va mon p'tit chat ?
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 :
Je trouve ça curieux qu'il n'y ait pas de solution toute faite, du genre [^mot_interdit]...
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);
merci d'avance pour toute idée !
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.
Merci Finnegans, mais je n'arrive pas à faire fonctionner #^((?!mot).)*$#
Tu y arrives toi ?
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager