Expression régulière et ET

Fermé
gunbol Messages postés 47 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 18 mars 2016 - 28 janv. 2009 à 09:53
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 - 28 janv. 2009 à 14:53
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 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
28 janv. 2009 à 10:25
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 janv. 2009 à 10:36
Re,

Tu es obligé de faire :
Pas forcément.
Par exemple
titi.*toto|toto.*titi
--
106485010510997108
1
Mikey_UFC Messages postés 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
28 janv. 2009 à 10:50
C'est pas faux. :p
0
gunbol Messages postés 47 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 18 mars 2016 4
28 janv. 2009 à 11:02
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 janv. 2009 à 11:06
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 janv. 2009 à 11:09
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 janv. 2009 à 11:10
Re,

Tu peux aussi utiliser les références arrière
Par exemple
(titi).*?(toto)|\2.*?\1
--
106485010510997108
0
gunbol Messages postés 47 Date d'inscription mercredi 19 septembre 2007 Statut Membre Dernière intervention 18 mars 2016 4
28 janv. 2009 à 11:11
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 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
28 janv. 2009 à 11:22
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 312 Date d'inscription jeudi 8 mars 2007 Statut Membre Dernière intervention 2 août 2010 1
28 janv. 2009 à 14:53
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