Je veux savoir si on peut remplacer if(preg_match('/boo/', $anything) and preg_match('/poo/', $anything))
avec une regex..
$anything = 'I contain both boo and poo!!';
par exemple..
Je veux savoir si on peut remplacer if(preg_match('/boo/', $anything) and preg_match('/poo/', $anything))
avec une regex..
$anything = 'I contain both boo and poo!!';
par exemple..
D'après ce que j'ai compris de votre question, vous cherchez un moyen de vérifier si les deux mots 'poo' et 'boo' existent dans une chaîne de caractères en utilisant une seule regex. Je ne vois pas de moyen plus élégant que celui-ci ;
preg_match('/(boo.*poo)|(poo.*boo)/', $anything);
C'est le seul moyen auquel je pense pour s'assurer que les deux motifs existent dans une chaîne sans tenir compte de l'ordre. Bien sûr, si vous saviez qu'ils sont toujours censés être dans le même ordre, ce serait plus simple =]
EDIT Après avoir lu le post dont MisterJ a donné le lien dans sa réponse, il semblerait qu'une regex plus simple pourrait être ;
preg_match('/(?=.*boo)(?=.*poo)/', $anything);
Vous pouvez utiliser la logique ou comme mentionné par @sroes :
if(preg_match('/(boo)|(poo)/,$anything))
Le problème, c'est que vous ne savez pas laquelle correspond.
Dans celui-ci, vous ferez correspondre "Je contient du boo", "Je contient du poo" et "Je contient du boo et du poo". Si vous voulez seulement faire correspondre "Je contient du caca et du sanglier", le problème est vraiment plus difficile à résoudre. Expressions régulières : Existe-t-il un opérateur AND ? et il semble que vous devrez vous en tenir au test php.
Vous pouvez y parvenir en modifiant votre expression régulière, comme d'autres l'ont indiqué dans d'autres réponses. Cependant, si vous souhaitez utiliser un tableau à la place, afin de ne pas avoir à lister un long motif d'expression régulière, utilisez quelque chose comme ceci :
// Default matches to false
$matches = false;
// Set the pattern array
$pattern_array = array('boo','poo');
// Loop through the patterns to match
foreach($pattern_array as $pattern){
// Test if the string is matched
if(preg_match('/'.$pattern.'/', $anything)){
// Set matches to true
$matches = true;
}
}
// Proceed if matches is true
if($matches){
// Do your stuff here
}
Alternativement, si vous essayez seulement de faire correspondre des chaînes de caractères, alors il serait beaucoup plus efficace d'utiliser strpos
comme ça :
// Default matches to false
$matches = false;
// Set the strings to match
$strings_to_match = array('boo','poo');
foreach($strings_to_match as $string){
if(strpos($anything, $string) !== false)){
// Set matches to true
$matches = true;
}
}
Essayez d'éviter les expressions régulières dans la mesure du possible, car elles sont beaucoup moins efficaces !
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.