Question à propos d'une chaîne regex théorique.
Le
Jean Francois Ortolo

Bonjour
J'aurais besoin de reconnaître la chaîne de caractère : "" dans
une chaîne de caractères.
Je pense faire celà avec la fonction preg_match().
La chaîne $str ne contient jamais de caractère #.
Si je fais :
if(preg_match("#^$#", $str))
Cette fonction va-t-elle rendre : true si ce qui est contenu dans
$str, est uniquement la chaîne : , et false autrement ?
Ou bien, est-ce que je dois spécifier celà :
if(preg_match("#---$#", $str))
?
Autrement dit :
La fonction preg_match() , interprète-t-elle toujours son premier
paramètre, comme une regex, et en particulier dans ce cas, la première
syntaxe peut-elle convenir ?
Merci beaucoup de vos réponses.
Bien amicalement.
Jean François Ortolo
J'aurais besoin de reconnaître la chaîne de caractère : "" dans
une chaîne de caractères.
Je pense faire celà avec la fonction preg_match().
La chaîne $str ne contient jamais de caractère #.
Si je fais :
if(preg_match("#^$#", $str))
Cette fonction va-t-elle rendre : true si ce qui est contenu dans
$str, est uniquement la chaîne : , et false autrement ?
Ou bien, est-ce que je dois spécifier celà :
if(preg_match("#---$#", $str))
?
Autrement dit :
La fonction preg_match() , interprète-t-elle toujours son premier
paramètre, comme une regex, et en particulier dans ce cas, la première
syntaxe peut-elle convenir ?
Merci beaucoup de vos réponses.
Bien amicalement.
Jean François Ortolo
Peu importe si la chaîne contient ou non des '#'. Par convention
preg_match attent une chaîne contenant une expression régulière
délimitée par un caractère quelconque (ou presque) où une des
caractères appariés comme ( ) ou { } etc. Ces caractère ne font
PAS partie de l'expression régulière.
C'est quand /l'expression régulière/ contient ce caractère de
délimitation (par exemple / - slash) que c'est embêtant et que
l'on en prend un autre.
Personnelement j'utilise toujours {} et donc :
preg_match("{^---$}", $str)
Oui ou presque, si la chaîne est ---n (n=fin de ligne ascii) elle
renverra 1 (et non true, mais c'est pareil pour le if) aussi.
tu as oublié l'ancre ^ j'imagine.
^---$ est identique à ^---$, tu y protège le tiret mais dans
ce contexte c'est inutile.
ton "autrement dit" m'inquiète: ça n'a aucun rapport avec la choucroute.
Le premier paramètre de preg_match est une chaîne contenant une regexp
délimitée.
En cas de doute, il n'y a pas de mal à faire des essais (ici sous
GNU/Linux dans un terminal) :
$ cat test.php
<?php
$re = '{^---$}';
echo preg_match($re,'---'),"n";
echo preg_match($re,"---n"),"n";
$re = '{^---$}';
echo preg_match($re,'---'),"n";
echo preg_match($re,"---n"),"n";
?>
$ php test.php
1
1
1
1
Le 08/05/2012 12:30, Jean Francois Ortolo a écrit :
^ ne peut être que le premier caractère de l'expression
$ ne peut être que le dernier.
Ici, vous souhaitez vérifier (si je comprends bien, mais vous ne l'avez
pas spécifié clairement) que --- se trouve ou non dans $str.
Il faut encadrer l'expression rationnelle par des /
J'écrirais :
if(preg_match("/---/", $str))
tout simplement
S'il s'agit de vérifier que $str est exactement ---, alors :
if(preg_match("/^---$/", $str))
mais dans ce cas précis, autant tester simplement l'égalité de chaînes.
La fonction renvoie le nombre de fois qu'elle trouve le motif décrit par
l'expression rationnelle. Comme preg_match s'arrête dès la première
occurrence trouvée, elle renvoie 0 ou 1. Voir preg_match_all pour
dénombrer toutes les occurrences.
Protéger ici - ne sert à rien, car ce symbole n'a pas de sens
particulier à cet endroit (en dehors de []).
Je ne comprends pas.
Amicalement, Vincent Verdon
Le manuel PHP recommande, dans le cas où l'on cherche juste une chaîne
dans une autre (c'est ici votre cas) :
J'ai oublié de le dire dans mon précédant post.
Amicalement, Vincent Verdon
Bonjour Monsieur
Merci beaucoup de votre réponse.
Je ne savais pas pour les caractères délimiteurs { et }
En ce qui me concerne, j'ai pris toutes les précautions pratiques,
pour que les chaînes ne contiennent pas le caractère # ( ni le saut de
ligne n ).
Normalement, mon script est prêt.
C'est un script très compliqué, une vraie usine à gaz de 25190 lignes
de php en mode iso, mais avant le 31 décembre 2011, il fonctionnait
normalement.
Depuis le 1er Janvier 2012, ce script, qui me sert à enregistrer les
paris gagnés des courses à événements avec les pronostics de mon site (
nouvelle version, j'ai remis l'ancienne version sur mon site
www.pronostics-courses.fr ), ne détecte plus aucun Multi en 7 ou en 6
chevaux gagnés, alors que l'ancienne version en détecte.
Je suis en train de débugguer, et jusqu'à présent ( ce matin ), j'ai
changé tous les caractères séparateurs des regex ( type PCRE ), de / en #
En effet, j'avais fait la faute classique, où certaines chaînes de
caractères, contenaient ce caractère /
J'ai vérifié qu'il n'y avait aucune erreur lors de la modification.
Je n'ai pas beaucoup espoir de réparer ce script, ni d'identifier
l'erreur, vu sa complexité... ;(
En dernier recours, je mettrai la base de données de mon site sur mon
ordinateur, puis je tracerai.
Bien amicalement.
Jean François Ortolo
je répète : le problème n'est PAS quand la chaîne testée contient le
délimiteur, mais quand l'expression régulière doit en contenir car
il faut alors le protéger. Avec {...} on a pas ce problème !
Rebonsoir
Finalement, j'ai retrouvé dans mes DVD, une version datant de
Septembre 2011, dont j'ai supprimé les appels à la fonction trim(), qui
enlevait les zéros de bord aux chiffres parfois, et j'ai refait toutes
mes stats.
Cà marche correctement.
Url :
www.pronostics-courses.fr/php/stats/new_affic_stats.php
Bien à vous.
Amicalement.
Jean François Ortolo