Page 1 sur 1

Preg_match_all

Posté : 11 sept. 2010, 05:19
par keny
Bonjour à tous,

J'essaie de récupérer avec l'aide d'un preg_match_all des termes "OR" provenant d'une requête de recherche.

Quelques exemples de recherche ...
pizza pain chien OR Chat OR piano -macaroni
chat OR chien -lapin
poule OR coq OR lapin OR vache

Bref, le but est de récupéré les termes compris entre les OR et les stocké dans un tableau J'y arrive avec un seul OR mais je suis incapable d'y arriver si la requête comporte plusieurs OR.

Voici mon code :

Code : Tout sélectionner

preg_match_all('~([^ ]+) OR ([^ ]+)~', $q, $or);
Avez-vous une suggestion ?

Merci

Re: Preg_match_all

Posté : 11 sept. 2010, 05:20
par Invité
Désoler je n'ai pas utilisé la bonne balise [ PHP ] !!!

Re: Preg_match_all

Posté : 11 sept. 2010, 11:46
par Aureusms
Et que donne :
preg_match_all('~(([^ ]+) OR ([^ ]+)+)~', $q, $or);

Re: Preg_match_all

Posté : 12 sept. 2010, 03:28
par keny
Voila ce que donne le code pour chacune des requetes
//pizza pain chien OR Chat OR piano -macaroni
Array ( [0] => Array ( [0] => chien OR Chat ) [1] => Array ( [0] => chien ) [2] => Array ( [0] => Chat ) ) 
//ici nous avons bien chien et chat mais pas piano !
//chat OR chien -lapin
Array ( [0] => Array ( [0] => chat OR chien ) [1] => Array ( [0] => chat ) [2] => Array ( [0] => chien ) ) 
//ici sa fonctionne !
//poule OR coq OR lapin OR vache
Array ( [0] => Array ( [0] => poule OR coq [1] => lapin OR vache ) [1] => Array ( [0] => poule [1] => lapin ) [2] => Array ( [0] => coq [1] => vache ) ) 
// ici sa fonctionne !
Merci pour votre temps et votre aide.

Re: Preg_match_all

Posté : 12 sept. 2010, 05:42
par stealth35
et ca :

\b[^OR\s]+\b

Re: Preg_match_all

Posté : 12 sept. 2010, 09:50
par Ryle
Si tu n'as pas d'autres contraintes que de récupérer ce qui est entre les "OR", un simple explode(' OR ', $taChaine) devrait tout aussi bien faire l'affaire non ? :)

Re: Preg_match_all

Posté : 13 sept. 2010, 03:23
par Invité
Merci à tous pour votre aide.

Finnalement j'ai laissé tomber les expressions régulières et j'ai codé à la dure un petit explode qui fonctionne comme ceci :
$mots = explode(" ",$q);
$or_found = array();
foreach($mots as $key=>$val){
	if($val =='OR'){
		$or_found[] = $mots[$key -1]; // Va mettre le mot précédent au OR dans le array
		$or_found[] = $mots[$key +1]; // Va mettre le mot suivant au OR dans le array
	}
	
}
//ont vérifie si il existe des résultats
if(count($or_found) > 0){
  print_r(array_unique($or_found)); //ici nous montre les résultats et supprime les doublons car chat OR chien OR poule donnera 2 chien !
// normalement ici vient mon code et non pas un simple print_r() !
}