Preg_match_all

keny
Invité n'ayant pas de compte PHPfrance

11 sept. 2010, 05:19

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

Invité
Invité n'ayant pas de compte PHPfrance

11 sept. 2010, 05:20

Désoler je n'ai pas utilisé la bonne balise [ PHP ] !!!

ViPHP
ViPHP | 1996 Messages

11 sept. 2010, 11:46

Et que donne :
preg_match_all('~(([^ ]+) OR ([^ ]+)+)~', $q, $or);
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

keny
Invité n'ayant pas de compte PHPfrance

12 sept. 2010, 03:28

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.

ViPHP
ViPHP | 5462 Messages

12 sept. 2010, 05:42

et ca :

\b[^OR\s]+\b

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 sept. 2010, 09:50

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 ? :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

13 sept. 2010, 03:23

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() !
}