8795 sujets

Développement web côté serveur, CMS

Bonjour tout le monde,

je me prends la tête depuis plusieurs heures sur ce problème :

j'ai une chaine de caractère classique du type :

string="toto titi tata ou tutu tyty";


Je veux récupérer le mot avant ou et le mot après ou. => tata et tutu donc.

J'arrive à récupérer avec explode tout ce qui est avant et tout ce qui est après mais pas juste le premier mot.

Je suppose que ça doit être un truc tout con (ou alors il y a une autre fonction plus simple pour faire ce genre de chose) mais je n'ai pas trouvé. Même sur Google mais je n'ai peut être pas fait les bonnes recherches Smiley confus

Bref merci d'avance pour vos avis car sinon à part faire un truc compliqué pour rechercher les espaces manuellement etc... HELP !!

Et bonnes fêtes de fin d'année à tous.
Modifié par Bilgor Le Rouge (20 Dec 2011 - 10:16)
Salut,

En expression régulière, ça donnerai plutôt :

$string = "toto titi tata ou tutu tyty";
preg_match("#([a-zA-Z]+) ou ([a-zA-Z]+)#", $string, $matches);

// avant " ou " : $matches[1] : tata
// après " ou " : $matches[2] : tutu


Avec ça, tu récupères donc la chaîne de caractère (minuscules ou majuscules) avant et après la chaîne " ou ".


++
Je savais bien qu'il y avait une méthode plus simple. Smiley biggrin

J'avais réussi à obtenir ce que je voulais mais avec le double de lignes de code...

Du coup je prends ta méthode bien plus simple.

Merci beaucoup pour ta réponse.
Salut,

Ça se fait très vite avec 2 explode, et c'est autrement moins couteux qu'une regexp. Ça doit faire un truc du style
$tab = explode(" ou ", $string);
$tabAvant = explode(" ", $tab[0]);
$tabApres = explode(" ", $tab[1]);
$motAvant = array_pop($tabAvant);
$motApres = array_shift($tabApres);


Plus de lignes de code (en fait 5 au lieu de 3 si on considère 2 lignes pour l'autre version pour récupérer les 2 valeurs), mais plus simple à mon goût. Sinon tu peux aussi faire juste un explode de toute la chaîne et utiliser array_search pour avoir l'index de "ou", plus qu'à prendre +1 et -1.