Expression régulière et ET
gunbol
Messages postés
52
Statut
Membre
-
Mikey_UFC Messages postés 315 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
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
Configuration: Windows XP Internet Explorer 6.0
9 réponses
-
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 )
} -
Re,
Tu es obligé de faire :
Pas forcément.
Par exempletiti.*toto|toto.*titi
--
106485010510997108 -
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 -
Re,
Comment ça trois paramètres ou plus?
Que comprends tu par paramètre?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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.
-
Re,
Tu peux aussi utiliser les références arrière
Par exemple(titi).*?(toto)|\2.*?\1
--
106485010510997108 -
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 ...... -
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 -
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";