Petite brouille avec les expressions régulières

Eléphant du PHP | 112 Messages

27 nov. 2009, 23:40

Bonjour à toi,
qui me fait l'honneur et le plaisir de penser pouvoir m'aider...

Je ne crois pas que mon cas soit incurable; voilà le problème:
J'essaie d'extraire d'une chaine toutes les accurences d'une sous chaine qui a pour caractéristiques de commencer par un point virgule, de se terminer par un point d'interrogation et de contenir entre ces 2 caractères tout ce qu'elle veut de chiffres et de lettres y compris le signe égal et le signe point. Je code ceci:
$chaine = preg_replace("^;*\?$","",$chaine);
et ça ne change rien à ma chaîne....
Merci!

Thierry

Mammouth du PHP | 985 Messages

28 nov. 2009, 00:26

Tu as oublié un point avant le *.
Le tout entouré de préférence dans ton exemple de parenthèses, donc:
(.*)

Car:
. = 1 caractères et n'importe lequel
* = nombre indéfini.
donc l'association des deux:
.* = nombre indéfini de caractères et n'importe lesquels :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 112 Messages

28 nov. 2009, 01:01

Bonsoir Drake,
merci, mais....
Je fais donc
$src = preg_replace("^;(.*)\?$","",$src);
et j'obtiens ...une page blanche.
J'ai bien vérifié que la chaine à traiter ne contenait pas de ; avant celui à partir duquel effectuer le remplacement, le problème ne vient donc pas de là.
Une autre idée...?
Thierry

Mammouth du PHP | 985 Messages

28 nov. 2009, 01:10

Test en remplaçant le point virgule par un autre caractère, si ca ne bug plus, c'est que tu dois enlever des points virgules nécessaires a des fins d'instructions...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 112 Messages

28 nov. 2009, 01:23

Pareil...

Mammouth du PHP | 985 Messages

28 nov. 2009, 01:37

Oui désolé, je suis bête.

A l'inverse iger()... la syntaxe de preg_replace() et preg_match().. demande l'utilisation de délimiteurs:
Comme ceci:
$src = preg_replace("#^;(.*)\?$#", "", $src);
donc ici les délimiteurs sont les #
(Ce n'est peut-être pas le bon terme, mais bon :wink: )

Ensuite tu peux utiliser des simples guillements, une bonne habitude a prendre, enfin ça c juste mon avis:
$src = preg_replace('#^;(.*)\?$#', '', $src);
http://php.net/manual/fr/function.preg-replace.php
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 985 Messages

28 nov. 2009, 01:45

Juste un truc:
Il faut enlever ^ et $ pour que cela cherche dans tout le texte.
Sinon $src devra absolument commencer par ; et finir par ?

Car:
^ = début de la chaine
$ = fin de la chaine

Donc:
$src = preg_replace('#;(.*)\?#', '', $src);
Clique sur résolut si tout est ok :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphant du PHP | 112 Messages

28 nov. 2009, 02:06

Parfait! Ça marche, merci beaucoup.

Je suis un peu miro, sans doute, mais je ne trouve pas de bouton "résolu" sur lequel cliquer...

Et enfin, dans la rubrique "votre avis nous intéresse", pourquoi privilégier les apostrophes aux guillemets? Il n'y a rien tant difficile à se défaire qu'une mauvaise habitude.

Cordialement,

Thierry

Mammouth du PHP | 985 Messages

28 nov. 2009, 02:16

Car par exemple entre les doubles guillemets, les variables sont exécutées...
Donc par habitude autant utiliser les simples guillemets partout, et utiliser les doubles quand on pas le choix ou que cela est plus simple...

Sinon pour marquer résolut, c'est la petite coche verte en haut là :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.