Discussion:
Remplacer ereg
(trop ancien pour répondre)
Pascale
2011-02-23 17:28:30 UTC
Permalink
J'ai une expression du genre :
if (eregi("^SAINT ",$ville))

Je sais qu'il faut remplacer le ereg par un preg_match, mais je n'ai pas
compris où caser le paramètre i... Désolée de poser une question aussi
bête, mais c'est une information que je n'ai pas su trouver dans la
documentation PHP.
--
Pascale
http://www.la-grille-verte.net
Olivier Miakinen
2011-02-23 17:44:58 UTC
Permalink
Bonjour,
Post by Pascale
if (eregi("^SAINT ",$ville))
Je sais qu'il faut remplacer le ereg par un preg_match, mais je n'ai pas
compris où caser le paramètre i... Désolée de poser une question aussi
bête, mais c'est une information que je n'ai pas su trouver dans la
documentation PHP.
Tu as plusieurs choix possibles.

Le plus simple consiste à mettre l'option après le délimiteur de fin,
ce qui rend l'option globale :
preg_match("/^SAINT /i", $ville)

Une autre façon de donner une option globale consiste à la mettre dans
les paramètres d'appel :
preg_match("/^SAINT /", $ville, $matches, PCRE_CASELESS)

Sinon, tu peux le mettre à l'intérieur de la chaîne de recherche, ce qui
permet éventuellement de restreindre l'option à une sous-chaîne. Pour la
chaîne complète, ça serait :
preg_match("/(?i)^SAINT /", $ville)
ou :
preg_match("/(?i:^SAINT )/", $ville)

Mais encore une fois, pour remplacer un eregi, je te conseille la
première forme, c'est la plus simple. Il sera temps ensuite de te
renseigner sur les autres si tu as des besoins plus spécifiques.

Cordialement,
--
Olivier Miakinen
Pascale
2011-02-23 21:49:17 UTC
Permalink
Post by Olivier Miakinen
Mais encore une fois, pour remplacer un eregi, je te conseille la
première forme, c'est la plus simple. Il sera temps ensuite de te
renseigner sur les autres si tu as des besoins plus spécifiques.
Je te remercie, c'est ce que je vais faire. En plus c'est pour une fonction
que j'utilise une fois tous les 36 du mois, et la solution que tu m'as
donnée convient tout à fait à ce que je cherche.
--
Pascale
http://www.la-grille-verte.net
Jean-Francois Ortolo
2011-02-23 21:46:05 UTC
Permalink
Post by Pascale
if (eregi("^SAINT ",$ville))
Je sais qu'il faut remplacer le ereg par un preg_match, mais je n'ai pas
compris où caser le paramètre i... Désolée de poser une question aussi
bête, mais c'est une information que je n'ai pas su trouver dans la
documentation PHP.
Réponse :

Regexp preg_match() équivalente à ce que tu écris :

if(preg_match("/^SAINT /i", $ville))

Les caractère slashe "/" est dans ce cas le caractère délimiteur, et
le caractère délimiteur ne doit pas apparaître dans le token $ville

Tout dépend donc de ce à quoi tu peux t'attendre dans le token $ville

Si $ville est censée pouvoir contenir "/", mais ne peut pas contenir
"#", alors le caractère délimiteur peut être "#", mais pas "/".

Bien à vous.

Amicalement.

Jean-François Ortolo
--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr
Pascale
2011-02-24 20:45:32 UTC
Permalink
Post by Jean-Francois Ortolo
if(preg_match("/^SAINT /i", $ville))
Les caractère slashe "/" est dans ce cas le caractère délimiteur, et
le caractère délimiteur ne doit pas apparaître dans le token $ville
Tout dépend donc de ce à quoi tu peux t'attendre dans le token $ville
Si $ville est censée pouvoir contenir "/", mais ne peut pas contenir
"#", alors le caractère délimiteur peut être "#", mais pas "/".
Bonne remarque, merci. En effet, je n'exclus pas que le nom de ville puisse
contenir un « / », par contre, « # » est plus que très très improbable.
Faut-il spécifiquement « déclarer » quelque part que le séparateur est #,
ou bien est-ce qu'il suffit de le substituer purement et simplement à / ?
--
Pascale
http://www.la-grille-verte.net
Olivier Miakinen
2011-02-24 20:59:36 UTC
Permalink
Post by Pascale
Post by Jean-Francois Ortolo
if(preg_match("/^SAINT /i", $ville))
Si $ville est censée pouvoir contenir "/", mais ne peut pas contenir
"#", alors le caractère délimiteur peut être "#", mais pas "/".
Bonne remarque, merci. En effet, je n'exclus pas que le nom de ville puisse
contenir un « / », par contre, « # » est plus que très très improbable.
Faut-il spécifiquement « déclarer » quelque part que le séparateur est #,
ou bien est-ce qu'il suffit de le substituer purement et simplement à / ?
<http://fr.php.net/manual/fr/regexp.reference.delimiters.php>

Attention à la coquille, lire « non alphanumérique » et pas
« alphanumérique », ou bien aller voir la version originale en
anglais :
<http://fr.php.net/manual/en/regexp.reference.delimiters.php>

Par exemple :
if(preg_match("#^SAINT #i", $ville))
if(preg_match("+^SAINT +i", $ville))
if(preg_match("%^SAINT %i", $ville))
if(preg_match("!^SAINT !i", $ville))
if(preg_match(":^SAINT :i", $ville))
etc.

ou bien :
if(preg_match("{^SAINT }i", $ville))
Jean-Francois Ortolo
2011-02-24 21:15:39 UTC
Permalink
Post by Pascale
Post by Jean-Francois Ortolo
if(preg_match("/^SAINT /i", $ville))
Les caractère slashe "/" est dans ce cas le caractère délimiteur, et
le caractère délimiteur ne doit pas apparaître dans le token $ville
Tout dépend donc de ce à quoi tu peux t'attendre dans le token $ville
Si $ville est censée pouvoir contenir "/", mais ne peut pas contenir
"#", alors le caractère délimiteur peut être "#", mais pas "/".
Bonne remarque, merci. En effet, je n'exclus pas que le nom de ville puisse
contenir un « / », par contre, « # » est plus que très très improbable.
Faut-il spécifiquement « déclarer » quelque part que le séparateur est #,
ou bien est-ce qu'il suffit de le substituer purement et simplement à / ?
Bonjour Madame ( ou Mademoiselle ;) )

C'est très simple.

Le fait que le caractère est le caractère délimiteur, est indiqué par
le fait qu'il suit ( et précède ), les doubles-quotes ( " ) entourant la
chaîne comparaison.

Ou, plus exactement, ce caractère délimiteur, est le caractère qui
délimite la chaîne, c'est-à-dire qui la commence, et la termine.

Il va de soi, que le token de comparaison entre les caractères
délimiteurs, n'inclue pas les caractère délimiteurs, pour ce qui est du
matchage de $ville, à ce token de comparaison.

Quant à la syntaxe de ce token de comparaison, c'est la syntaxe PCRE,
et non pas la syntaxe Posix, donc il peut parfois y avoir des
différences. Cependant, dans votre cas, le token de comparaison est
valide d'après les deux syntaxes, donc la syntaxe PCRE, ce qui fait que
le token est valide.

Donc, vous remplacez / par # , à la condition expresse, que vous
soyez aboslument sûre, que # ne figurera pas dans $ville, autrement il y
aurait une erreur à à l'exécution du script php, qui s'arrêterait à ce
moment-là.

Il va de soi, que n'importe quel caractère peut faire office de
caractère délimiteur, pour peu qu'il n'apparaisse pas dans $ville

J'espère que c'est plus clair maintenant. ;)

Bien à vous.

Amicalement.

Jean-François Ortolo
--
Visitez mon site gratuit donnant des Statistiques,
des Pronostics et des Historiques Graphiques
sur les Courses de Chevaux:
http://www.pronostics-courses.fr
Pascale
2011-02-25 08:52:09 UTC
Permalink
Post by Jean-Francois Ortolo
Bonjour Madame
Madame, ça ira (-:

Merci à tous les deux, Jean-François et Olivier, j'ai la réponse à mon
problème et les explications (compréhensibles même pour moi) qui vont avec,
donc c'est parfait !
--
Pascale
http://www.la-grille-verte.net
Continuer la lecture sur narkive:
Loading...