8796 sujets

Développement web côté serveur, CMS

Je change d'environnement de développement et mon nouveau serveur est en Php5.

Je rencontre donc un problème avec eregi qu'il me faut remplacer par preg_match

J'ai un problème avec le caractère /

Si je fais :

$atrouver='chainerecherchee?.';
$texte='je veux savoir si il y a la chainerecherchee?. ici';

if (preg_match("/$atrouver/", $texte))
{
echo 'trouvé';
}
else
{
echo 'pas trouvé';
}

La syntaxe m'a l'air ok et ça fonctionne.

Par contre si dans je cherche un /

$atrouver='chaine/recherchee?.';
$texte='je veux savoir si il y a la chaine/recherchee?. ici';

Ça ne fonctionne pas.
Et même si j'insère un caractère d'échappement, \ devant le / le preg_macth ne trouve pas la chaine.

Quelqu'un pourrait me renseigner ?

Merci.
Modifié par La242 (09 Jul 2010 - 08:33)
Hello La242 et bienvenue, Smiley smile

le plus simple est de changer le délimiteur :
$atrouver='chainerecherchee?.';
$texte='je veux savoir si il y a la chainerecherchee?. ici';

if (preg_match("#$atrouver#", $texte)) {
	echo 'trouvé';
} else {
	echo 'pas trouvé';
}
Je t'invite également à lire cet article sur Mediabox.
Merci Heyoan pour ta réponse rapide. D'un coup tout devient simple.

Mais dans si je remplace mon délimiteur / par un # j'aurais le même problème si la chaiîne à rechercher contient un #. Quels sont les délimiteurs possibles ? Où y a-t-il un moyen de les faire précéder d'un caractère d'échappement comme le \ ?

Je vais lire de suite l'article que tu mets en lien.
Si le caractère utilisé comme délimiteur risque de se retrouver dans la chaîne il faut effectivement l'échapper :
$atrouver='chaine#recherchee?.'; 
$texte='je veux savoir si il y a la chaine#recherchee?. ici'; 

if (preg_match('#'.str_replace("#", "\#", $atrouver).'#', $texte)) { 
    echo 'trouvé'; 
} else { 
    echo 'pas trouvé'; 
}

Modifié par Heyoan (08 Jul 2010 - 18:04)
Et je suis allé voir l'article en question, c'est d'une clarté remarquable.

Merci.
Juste pour mentionner que le délimiteur tilde ~ est aussi une alternative. C'est réellement difficile que celui ci soit pressent dans un chaine de caractères.
'lut matmat,

matmat a écrit :
Juste pour mentionner que le délimiteur tilde ~ est aussi une alternative. C'est réellement difficile que celui ci soit pressent dans un chaine de caractères.
C'est vrai mais je dirais que si le contenu est en saisie par un utilisateur il vaut mieux prévoir tous les cas et l'échapper quand même. Smiley murf

@La242 > de rien Smiley smile !

Si tu considères que ce sujet est [Résolu] merci de l'indiquer en éditant ton premier post et en modifiant le titre. Smiley cligne