Regex pour une recherche [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012
-
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012
-
Bonjour,

J'ai quelques problèmes avec mon regex et j'aimerais bien que quelqu'un puisse m'aider.

- Ma recherche se fait sur une possibilité de 5 mots clés. Si je recherche le mot « mal », je ne veux pas que le mot « maladie » soit trouvé.

- De plus, c'est un ET que je voudrais avoir dans ma recherche et non un OU. Si j'ai 3 mots clés, les 3 mots doivent se retrouver dans l'enregistrement.

- L'ordre des mots doit aussi être respecté. Si je recherche, avec 3 mots clés, « Je » « suis » « homme » donc me donner comme résultat, "Je suis un homme" et non "L'homme que je suis".

- Finalement, le nombre de mot entre chaque mot clé peut être spécifié. Les mots clés ne peuvent être séparés par 0 à 60 mots. Dans l'exemple "Je suis un homme", si je recherche « Je » et « homme » avec 0 comme nombre de mot entre les mots clés, la recherche ne trouvera rien. Par contre, si je met un nombre entre 3 et 60, la recherche retournera TRUE.

Probablement que ça prendra plusieurs RegEx mais je ne sais vraiment pas comment m'y prendre.

J'aimerais bien que vous puissiez me donner un bon coup de main.

Merci !

15 réponses

Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
faut virer la ponctuation (ici la quote gène)

comme je t'ai dit plus tôt:

"premier ménage, donc, de (non exaustif) :

[,;:.!?'"\[\]\(\)=+\\/\-«»]


puis suppression des accents, sauts de lignes et espace multiples"
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
assez galère a lire... ton post...

un début (n'inclut pas cette limite de 60 mots)

\bje\b[\W\w]*?\bsuis\b[\W\w]*?\bhomme\b
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

Merci !

Mais je dois ajouter cette limite de 60 mots. C'est ce que le client veut et je dois respecter cette demande.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
je peux t'aider, je pense,
considérant que tu a supprimé les accents, et la ponctuation.

ca compliquerait inutilement l'expression si ce nettoyage n'etais pas fais en amont
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
premier ménage, donc, de (non exaustif) :

[,;:.!?'"\[\]\(\)=+\\/\-«»]


puis suppression des accents, sauts de lignes et espace multiples
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
\bje (?:\w+ ){0,60}\bhomme\b

nettoyag necessaire.
par contre, va chercher les expressions les plus longues....

mais on pet combiner avec d'autre mots clés :

\bje (?:\w+ ){0,60}\bhomme(?:\w+ ){0,60}\bpatient\b
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

Je vais essayer ça et je te reviens avec ça.

Un gros merci !!
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
gaffe, manque un espace:

\bje (?:\w+ ){0,60}\bhomme (?:\w+ ){0,60}\bpatient\b

faut en mettre un après chaque mot clé, sauf le dernier (lui, il est suivi de \b
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

Est-ce que je pourrais te poser une autre question.

J'ai présentement un problème de recherche. Je recherche dans mon formulaire le mot « le » mais le système me trouve « drôle ».

Le regex que j'ai : preg_match("#\b(".$frm_keywords.")\b#i", $ligne) où $frm_keywords contient le mot clé « le » dans ce cas.

Est-ce que je dois faire quelque chose de plus dans ma requête SQL ??

J'apprécie grandement ton aide...
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
pourquoi ces parenthèses, puisque tu sais le mot ...

peut etre une option a régler dans php, là, c'est plus regex....c'est php, le soci
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

J'utilise les parenthèses car je peux avoir de 1 à 5 mots clés dans ma recherche, que je sépare par un |.
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

En passant, est-ce que les accents dans les mots clés doivent être converties en code html é...?

Car, présentement ma recherche ne trouve pas le mot « été » et je sais très bien qu'elle devrait en trouver.

Merci !
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
67
remplace en "ete"
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

Désolé mais ça ne fonctionne pas.

J'ai commme code : preg_match("#\bquand (?:\w+ ){0,60}\bmaison\b#i","oui mais m'as te dire une affaire moi quand j'ai bati la maison l'annee passee");

Est-ce possible qu'il me manque quelque chose ?

Merci !
Messages postés
20
Date d'inscription
vendredi 3 octobre 2008
Statut
Membre
Dernière intervention
14 août 2012

Merci pour ton aide !