|
Voir le sujet précédent :: Voir le sujet suivant
|
| Auteur |
Message |
| |
|
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Jeu Oct 27, 2005 16:27 Sujet du message: definition d'un preg_match |
|
|
Bonjour,
Juste une petit bouteille à la mer, car je suis en train de m'arracher les cheveux sur une fonction preg_match que je n'arrive pas à paramétrer.
J'ai tout simplement besoin de savoir si une date du type jj/mm/aaaa se trouve dans une chaine spécifique.
J'ai le début :
| Code: |
| $chaine = "abcd [xx/xx/xxxx] efgh"; |
Après je n'arrive à rien !
Si quelqu'un peut m'aider... Merci ! |
|
| |
|
 |
correiaj WRInaute accro

Inscrit le: 25 Avr 2005 Messages: 1106 Localisation: Paraná y Bombonera
|
Posté le : Jeu Oct 27, 2005 16:47 Sujet du message: definition d'un preg_match |
|
|
$subject = "ta chaine";
$pattern = '/^([0-9]{2}\/[0-9]{2}\/[0-9]{4})/';
preg_match($pattern, $subject, $matches);
if(strstr($matches,"/")){
echo `ya la date'; }
else { echo 'ya pas la date'; } |
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Jeu Oct 27, 2005 16:50 Sujet du message: definition d'un preg_match |
|
|
heu...
C'est à dire que...
Waw... !
Ma fierté me crie : "Prends ça dans ta tronche, camarade ! Vite, propre et sans bavure ! T'as encore plein de trucs à apprendre en php !"
C'est encore mieux que ce que je cherchais !
Merci beaucoup ! |
|
| |
|
 |
ChezThierry WRInaute impliqué

Inscrit le: 21 Oct 2005 Messages: 273
|
Posté le : Jeu Oct 27, 2005 17:12 Sujet du message: definition d'un preg_match |
|
|
| correiaj a écrit: |
$subject = "ta chaine";
$pattern = '/^([0-9]{2}\/[0-9]{2}\/[0-9]{4})/';
preg_match($pattern, $subject, $matches);
if(strstr($matches,"/")){
echo `ya la date'; }
else { echo 'ya pas la date'; } |
Si je ne m'abuse, cela ne fonctionnera que si la chaine commence par la date. Il vaut mieux faire ainsi :
| Code: |
$subject = 'on est le 27/10/2005 a 17h09';
$pattern = '/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/';
if (preg_match($pattern, $subject, $match)) {
echo 'ya la date<br>';
echo "match : $match[0]" ;
} else {
echo 'ya pas la date';
}
|
|
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Jeu Oct 27, 2005 18:00 Sujet du message: definition d'un preg_match |
|
|
je teste les 2 versions ce soir.
En tout cas merci de m'aider à résoudre mes p'tits problèmes !  |
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Jeu Oct 27, 2005 19:04 Sujet du message: definition d'un preg_match |
|
|
Alors, j'ai testé avec ça :
| Code: |
$chaine = " bla bla (01/05/2005) bla bla [22/06/2005] et bla bla (13/07/2005)";
echo "1ere methode<br>";
$pattern = '/^([0-9]{2}\/[0-9]{2}\/[0-9]{4})/';
preg_match($pattern, $chaine, $matches);
if(strstr($matches,"/")){
echo 'ya la date'; }
else { echo 'ya pas la date'; }
echo "<br><br>";
echo "2eme methode<br>";
$pattern = '/[0-9]{2}\/[0-9]{2}\/[0-9]{4}/';
if (preg_match($pattern, $chaine, $matched)) {
echo 'ya la date<br>';
echo "match : $matched[0]" ;
} else {
echo 'ya pas la date';
}
|
J'obtiens :
| Citation: |
1ere methode
ya pas la date
2eme methode
ya la date
match : 01/05/2005 |
Donc la 1ere semble ne pas fonctionner.
La 2eme fonctionne, mais je voudrais appeler uniquement la date entre les []. Les autres ne m'interessent pas. J'ai tenté de modifier le $pattern, mais sans succès.
De quelle façon dois-je le modifier ? |
|
| |
|
 |
ChezThierry WRInaute impliqué

Inscrit le: 21 Oct 2005 Messages: 273
|
Posté le : Jeu Oct 27, 2005 19:21 Sujet du message: definition d'un preg_match |
|
|
faut "escaper" les crochets, ça donne pour le pattern :
| Code: |
$pattern = '/\[([0-9]{2}\/[0-9]{2}\/[0-9]{4})\]/';
|
pour avoir la date dans une variable, dans ce cas, faudra lire $matched[1] et non $matched[0] sinon tu récupères les crochets avec.
dans ton exemple, ça donne :
$matched[0] = "[22/06/2005]"
et
$matched[1] = "22/06/2005" |
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Jeu Oct 27, 2005 19:32 Sujet du message: definition d'un preg_match |
|
|
Génial ! ça marche nikel !
Encore merci !
J'ai plus qu'à trouver une page qui explique clairement comment paramétrer cette fonction, histoire quand meme de pouvoir comprendre pourquoi ça marche  |
|
| |
|
 |
siddhy WRInaute occasionnel

Inscrit le: 20 Sep 2004 Messages: 141 Localisation: Perpignan
|
Posté le : Ven Oct 28, 2005 9:51 Sujet du message: definition d'un preg_match |
|
|
Bonjour,
J'aurais une petite question moi aussi...
Et si on veut TOUTES les dates de la chaine ?
En fait j'en ai eu besoin pour récupérer tous les liens d'une page HTML pour faire une sorte de moteur, et je me suis fait une petite fonction mais elle est un peu lourde.. alors je me demandais si ....
Merci |
|
| |
|
 |
spidetra WRInaute accro

Inscrit le: 07 Juil 2003 Messages: 1499 Localisation: Toulouse
|
Posté le : Ven Oct 28, 2005 10:09 Sujet du message: definition d'un preg_match |
|
|
...
Dernière édition par spidetra le Ven Aoû 04, 2006 14:07; édité 1 fois |
|
| |
|
 |
siddhy WRInaute occasionnel

Inscrit le: 20 Sep 2004 Messages: 141 Localisation: Perpignan
|
Posté le : Ven Oct 28, 2005 10:18 Sujet du message: definition d'un preg_match |
|
|
ah voila!
pourtant j'avais fait des recherches...
mauvaises en l'occurence...
Merci  |
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Ven Oct 28, 2005 13:54 Sujet du message: definition d'un preg_match |
|
|
Je repost sur ce fil car c'est le meme genre de question :
J'ai cherché une doc sur ces expressions bizarres genre [0-9], [^-] ou [.*] mais je ne trouve rien de "pédagogique".
Vous auriez une adresse à me conseiller ?
Le pire c'est que c'est pour des problèmes mineurs :
maintenant, je dois utiliser un preg_replace pour remplacer tous les ? dont les caractères précédents et suivants sont des lettres alphabétiques.
| Code: |
abc?edf => transformé en abcXXdef
[espace]?[espace] => rien
[espace]?def => rien |
Merci du coup de main !
Edité **************
Oops, j'avais pas vu les post supplémentaires ! Je vais assayer de me débrouiller avec ça |
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Ven Oct 28, 2005 14:43 Sujet du message: definition d'un preg_match |
|
|
Franchement compliqué comme truc. Ca va me prendre du temps...
En attendant, quelqu'un aurait-il la bonne formule ? |
|
| |
|
 |
ChezThierry WRInaute impliqué

Inscrit le: 21 Oct 2005 Messages: 273
|
Posté le : Ven Oct 28, 2005 15:24 Sujet du message: definition d'un preg_match |
|
|
| bozobuzu a écrit: |
maintenant, je dois utiliser un preg_replace pour remplacer tous les ? dont les caractères précédents et suivants sont des lettres alphabétiques.
abc?edf => transformé en abcXXdef
[espace]?[espace] => rien
[espace]?def => rien
|
| Code: |
$string = 'abc?edf' ;
$pattern = '/([a-z])\?([a-z])/i';
$replacement = '$1XX$2';
echo preg_replace($pattern, $replacement, $string);
|
Je ne peux par contre pas t'orienter sur un guide "pédagogique" par contre, ça fait juste suffisament d'années que je fais du perl pour parler assez bien le regexp
Mais je te conseille le Regex Coach pour tester tes regexp plus facilement. |
|
| |
|
 |
bozobuzu WRInaute discret

Inscrit le: 25 Sep 2004 Messages: 61
|
Posté le : Ven Oct 28, 2005 16:17 Sujet du message: definition d'un preg_match |
|
|
Je vais regarder ça. Mais ça commence fort, il semble considérer le ? comme un caractere joker.
Alors comment je la fait mon expression, moi ??
En attendant, je me répète : si quelqu'un peut me dire comment remplacer dans une chaine tous les *?* (* étant n'importe quel caractere de l'alphabet sauf l'espace) par une autre expression type *XX*
Merci |
|
| |
|
 |
| |
|
|