definition d'un preg_match

Discussion dans 'Développement d'un site Web ou d'une appli mobile' créé par bozobuzu, 27 Octobre 2005.

  1. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    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 ! :mrgreen:

    Si quelqu'un peut m'aider... Merci !
     
  2. correiaj
    correiaj WRInaute impliqué
    Inscrit:
    25 Avril 2005
    Messages:
    987
    J'aime reçus:
    0
    $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'; }
     
  3. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    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 ! :D

    Merci beaucoup !
     
  4. ChezThierry
    ChezThierry WRInaute occasionnel
    Inscrit:
    21 Octobre 2005
    Messages:
    256
    J'aime reçus:
    0
    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';
    }
    
    
     
  5. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    je teste les 2 versions ce soir.

    En tout cas merci de m'aider à résoudre mes p'tits problèmes ! :lol:
     
  6. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    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 :

    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 ?
     
  7. ChezThierry
    ChezThierry WRInaute occasionnel
    Inscrit:
    21 Octobre 2005
    Messages:
    256
    J'aime reçus:
    0
    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"
     
  8. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    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 ;)
     
  9. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    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
     
  10. spidetra
    spidetra WRInaute passionné
    Inscrit:
    7 Juillet 2003
    Messages:
    1 215
    J'aime reçus:
    0
  11. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    ah voila! :D

    pourtant j'avais fait des recherches... :?
    mauvaises en l'occurence...

    Merci :D
     
  12. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    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
     
  13. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    Franchement compliqué comme truc. Ca va me prendre du temps...
    En attendant, quelqu'un aurait-il la bonne formule ?
     
  14. ChezThierry
    ChezThierry WRInaute occasionnel
    Inscrit:
    21 Octobre 2005
    Messages:
    256
    J'aime reçus:
    0
    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.
     
  15. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    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 ?? :mrgreen:

    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
     
  16. siddhy
    siddhy WRInaute discret
    Inscrit:
    20 Septembre 2004
    Messages:
    155
    J'aime reçus:
    0
    Salut,

    Il me semble que ChezThierry T'a donné la solution non ?
    pour le "?" il faut l'échapper : "\?" comme ChezThierry te l'a montré

    :)
     
  17. bozobuzu
    bozobuzu WRInaute discret
    Inscrit:
    25 Septembre 2004
    Messages:
    64
    J'aime reçus:
    0
    Oulala.. je délire complètement, moi...

    Je l'avait meme pas vu ! 2X dans le meme post, faut que j'arrete de coder jusqu'à 5h du mat, moi, ça me réussit pas. En tout cas, j'ai plus 20 ans ;)
     
  18. comparef
    comparef WRInaute occasionnel
    Inscrit:
    5 Avril 2005
    Messages:
    434
    J'aime reçus:
    0
    Apparement ici c'est le topic des pros du preg_match :) je vais donc poster ici !

    Donc j'ai ce morceau de code :
    Code:
    preg_match_all('/<span>(.*)<\/span>/i', $file, $ArraySub, PREG_SET_ORDER); 
    foreach ($ArraySub as $match) { 
       echo strip_tags($match[1]).'<br><br>'; 
    } 
    Qui me pose quelques pobleme. Il marche, mise a part une chose :
    Lorsque dans le $file il y a un saut de ligne entre le <span> et le </span>, il ne reconnait pas l'expression reguliere.

    Exemple :
    ici il me sort bien "c'est bien ce texte que je veux" :
    mais pas ici :
    Quelqu'un aurait-il la solution ?

    Merci d'avance
     
Chargement...
Similar Threads - definition preg_match Forum Date
Définition du domaine favori impossible sur GSC Débuter en référencement 30 Juillet 2018
Définition : Le HSO ou l'Human Search Optimisation Rédaction web et référencement 11 Janvier 2018
Le budget de crawl de Google : définition et conseils d'optimisation Techniques avancées de référencement 17 Janvier 2017
Copié-collé des definitions de wikipedia et referencement Débuter en référencement 5 Septembre 2013
Mauvaise définition Visiteurs Uniques - GG Analytics ? Google Analytics 17 Mai 2013
Construire Lexique URL unique par définition sous Wordpress Problèmes de référencement spécifiques à vos sites 17 Novembre 2012
définition de "presse" Crawl et indexation Google, sitemaps 26 Octobre 2012
Definition des objectifs Google Analytics 20 Avril 2012
definition des objectifs Débuter en référencement 13 Avril 2012
L a Définition compléte du référencement Débuter en référencement 3 Juin 2011
Problème dans la définition d'un objectif. Google Analytics 6 Mai 2011
Aide pour la définition d'une règle URL Rewriting et .htaccess 27 Avril 2011
Définition : longue traine (Long tail) Débuter en référencement 4 Janvier 2011
Définition d'un lien dofollow Débuter en référencement 15 Avril 2010
Script PHP générateur de définitions Développement d'un site Web ou d'une appli mobile 12 Avril 2010
Définition d'un contenu de qualité Rédaction web et référencement 7 Mars 2010
Entonnoir de conversion : pb sur la définition Google Analytics 4 Janvier 2010
Item définition à côté du mot-clé Google : l'entreprise, les sites web, les services 2 Octobre 2009
Definition de "principales pages de destination" Google Analytics 22 Septembre 2009
Site de Wallpapers en Haute Définition Demandes d'avis et de conseils sur vos sites 8 Août 2009