Voici un petit problème que je soumet volontiers à votre science des expressions régulières (ou rationnelles, je ne sais jamais trop
Je dispose d'une liste de strings. Je souhaiterai pouvoir choisir certains éléments de cette liste suivant un ou deux extraits de texte fournis.
Le choix des éléments si un des deux extraits est présent ne pose pas de soucis à priori, mais là où je coince, c'est la manière d'imaginer un masque capable de tester la présence des deux extraits de texte, quelque soit leur ordre d'apparition dans les éléments de la liste...
Bon, comme l'explication est un peu complexe, je sens que c'est le moment de montrer un peu de code
// Liste de strings d'où je dois isoler les éléments contenant deux extraits de texte :
$liste = array('undeuxtrois', 'troisdeux', 'deuxun', 'troisdeuxun');
// Les deux extraits de texte pour isoler les éléments de la liste qui les contiennent :
$extrait1 = 'un';
$extrait2 = 'trois';
// Ceci est une de mes nombreuses tentatives pour avoir le résultat souhaité :
$resultat = preg_grep("#(".$extrait1."|".$extrait2.").*(".$extrait1."|".$extrait2.")#", $liste);
// Visualisation du résultat :
var_export($resultat); // array ( 0 => 'undeuxtrois', 3 => 'troisdeuxun', )
Ok, le masque du "preg_grep" que j'utilise dans ce code semble bien fonctionner, en tout cas il me retourne une liste d'éléments contenant les deux extraits recherchés... Seulement, je me dis qu'il y a sûrement une syntaxe de masque bien plus simple à utiliser pour trouver les éléments de la liste qui contiennent l'extrait 1 ET l'extrait 2, quelque soit leur ordre d'apparition dans le texte, mais, malgré mes multiples tentatives, je ne suis pas arrivé à la trouver...
Du coup, je me demande si quelqu'un avait une petite idée de la manière de simplifier ce masque tout en obtenant les résultats escomptés ?
Merci de vos lumières... à+