Page 1 sur 1

Sélectionner une phrase à partir d'un mot

Posté : 31 déc. 2014, 16:58
par JacquesDumont
Bonjour, j'aimerai créer un filtre anti-insulte pour un petit forum que je code.

Je voudrais que si il y a une insulte dans ma table "topic_reponses" la phrase entière soit listée dans mon administration.

Pour cela, j'ai besoin de lister la phrase entière à partir d'un mot (ex: p*).
Dans une phrase: "Tu es un p*"

Ma question: comment sélectionner une phrase à partir d'un mot ? même si il est en milieu / fin de phrase ?

Re: Sélectionner une phrase à partir d'un mot

Posté : 31 déc. 2014, 17:37
par tof73

Re: Sélectionner une phrase à partir d'un mot

Posté : 02 janv. 2015, 13:20
par @rthur
En fait il faut que tu définisses ce qui caractérise un début et une fin de phrase.
Si on considère qu'une phrase commence par un début de ligne ou par le point de la phrase précédente, et se termine par un point ou une nouvelle ligne, voila ce que j'ai fait pour capturer les phrases contenant les mots "con" et "idiot" :

Code : Tout sélectionner

(?:^|\.|\n)([^\.\n]*(?:\Wcon\W|\Widiot\W)[^\.\n]*)
Petite explication de ce motif regex :
( ) :arrow: les parenthèses indiquent un groupe de caractères/mots que l'on veut capturer
(?: ) :arrow: indique un groupe de caractères/mots non capturant (mais si il est lui même situé à l'intérieur de parenthèses simples, alors on va le capturer mais pas de façon séparée.
^ :arrow: représente le début de la zone de texte
\. :arrow: représente le caractère point
\n :arrow: représente une nouvelle ligne
| :arrow: représente un "OU" logique
\W :arrow: représente un caractère qui ne fait pas partie d'un mot (espace, virgule, point-virgule, etc...)

Tu peux voir le résultat (et le modifier et améliorer) avec l'outil suivant :
http://regexr.com/3a5b1




Voila ce que ça donnerai en PHP avec preg_match_all() :
<?php

$texte="lorem ipsum idiot sit amet, consectetur 
adipiscing elit. Aenean sit amet luctus elit. Suspendisse faucibus sollicitudin felis, tristique pellentesque purus tincidunt nec. integer a ex con ligula facilisis suscipit vel a dui. Nam fermentum gravida dolor, at interdum coni mattis non. usce pulvinar, sem 
sed tincidunt sollicitudin, nulla diam tincidunt con, in pulvinar purus purus sit amet ipsum. Sed eget nunc diam. Proin non magna non purus suscipit congue. In in ornare orci. Donec consequat ante eu mi dictum porttitor. Aliquam ac idiot fringilla, tincidunt neque sed, varius sapien. Vestibulum volutpat ultricies odio et accumsan. Aenean sagittis, nulla nec rhoncus blandit, neque lectus tincidunt odio, sed sollicitudin lectus libero ac nulla. Nulla viverra finibus con.";


$motif_regex="/(?:^|\.|\n)([^\.\n]*(?:\Wcon\W|\Widiot\W)[^\.\n]*)/";

preg_match_all($motif_regex, $texte, $matches);

var_dump($matches[1]);

Re: Sélectionner une phrase à partir d'un mot

Posté : 03 janv. 2015, 16:05
par JacquesDumont
Merci Arthur