Expression régulière et ET

gunbol Messages postés 52 Statut Membre -  
Mikey_UFC Messages postés 315 Statut Membre -
Bonjour,

Je suis à la recherche d'une réponse à une question bête:

Dans une ligne du genre "toto blablabla titi", je recherche une expression régulière qui permet de rechercher deux patterns: toto ET titi. Il faut que le résultat soit positif uniquement si les deux patterns ont été trouvés. Je n'ai pas la possibilité d'imbriquer deux expressions: il faut que ce soit dans une seule et unique expression régulière.

Le caractère & ne marche pas, alors que le | marche bien pour le OU.

"toto blablabla titi blbla" => OK
"titi blablablabl toto" => OK
"toto blabla" => KO
"blabla titi" => KO
"tititototiti" => OK

Il me faudrait un pattern du genre "(toto)LE_SIGNE_ET(titi)"

Je vais devenir fou (et j'ai déjà fait devenir fou mes collègues).

Merci d'avance pour votre aide !

Gunther
A voir également:

9 réponses

Mikey_UFC Messages postés 315 Statut Membre 1
 
A ma connaissance, il n'y a pas de ET dans les expressions régulières.

Tu es obligé de faire :
if (recherche("toto", $maChaine) && recherche("titi", $maChaine))
{
// contient toto et titi
}
else
{
// ne contient pas ( toto et titi )
}
1
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Tu es obligé de faire :
Pas forcément.
Par exemple
titi.*toto|toto.*titi
--
106485010510997108
1
Mikey_UFC Messages postés 315 Statut Membre 1
 
C'est pas faux. :p
0
gunbol Messages postés 52 Statut Membre 4
 
Hello,

Merci pour vos réponses.

J'avais pensé à la solution de Lami20J, mais dès qu'on a trois paramêtres voire plus, c'est la galère, car il faut coder toutes les combinaisons.

Pas aussi mortelles que ca les expressions régulières :o) !

@+

Gunther
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Comment ça trois paramètres ou plus?
Que comprends tu par paramètre?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Par exemple en perl tu peux utiilser le quantificateur ? qui dit au moteur de regex de s'arrêter après la 1ère occurence trouvé
titi.*?toto|toto.*?titi
Tu n'as pas dit avec l'environnement pour tes regex.
Php, Perl, sed, etc.
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Tu peux aussi utiliser les références arrière
Par exemple
(titi).*?(toto)|\2.*?\1
--
106485010510997108
0
gunbol Messages postés 52 Statut Membre 4
 
Par trois paramêtres, je veux dire que si je cherche:

toto titi tutu tata, il faut faire une expression régulière qui prenne en compte toutes les combinaisons:

titi.*toto.*tata.*tutu|toto.*titi.*tutu.*tata|titi.*tata.*toto.*tutu ......
0
lami20j Messages postés 21644 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Re,

Chaque regex c'est en fonction de texte source et de résultat voulu ;-)
Par exemple
(titi).*(toto).*(tata).*(tutu)|\4.*\1.*\2.*\3|\3.*\4.*\1.*\2|\2.*\3.*\4.*\1
--
106485010510997108
0
Mikey_UFC Messages postés 315 Statut Membre 1
 
Si le nombre de paramètre est variable, je pense qu'il vaut mieux faire une recherche par mot.
Chaque mot étant stocké dans un tableau.
$trouve=true;
foreach($tab as $mot)
  if !(recherche($mot, $chaine)) $trouve = false;
if($trouve) echo "c bon";
else echo "c pas bon";
0