Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Remplacer ereg

7 réponses
Avatar
Pascale
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

7 réponses

Avatar
Olivier Miakinen
Bonjour,

Le 23/02/2011 18:28, Pascale a écrit :
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.



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
Avatar
Jean-Francois Ortolo
Le 23/02/2011 18:28, Pascale a écrit :
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.





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
Avatar
Pascale
Olivier Miakinen <om+ écrivait
news:4d6546b5$:

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
Avatar
Pascale
Jean-Francois Ortolo écrivait
news:4d654769$0$32506$:

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
Avatar
Olivier Miakinen
Le 24/02/2011 21:45, Pascale a écrit :

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))
Avatar
Jean-Francois Ortolo
Le 24/02/2011 21:45, Pascale a écrit :
Jean-Francois Ortolo écrivait
news:4d654769$0$32506$:

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
Avatar
Pascale
Jean-Francois Ortolo écrivait
news:4d66c7c0$0$18799$:

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