Expression régulière : Petit problème

Résolu
Alea -  
lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   -
Bonjour,
Alors voilà: Je suis en projet et je dois développer en php un automate pour le web.
J'ai appris très recemment qu'on pouvait utiliser les expressions régulières mais comme je n'y connait rien, même avec la doc php.net et des essais ben là ça marche pas la syntaxe que j'ai faite.
En fait je veux récupérer le "a name=#" d'un code html et j'arrive pas à mettre les bons paramètres pour que ça s'execute.

Voici mon code:

if (preg_match_all("/a.href=[.#]([a-z][A-Z][0-9][.])$/",$line,$r))
{
.....
}

(j'ai mis en gras ce qui me fait galérer...)

Merci d'avance pour votre aide!

7 réponses

  1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    En général c'est bien de savoir la structure de texte pour pouvoir exploiter une regex

    /a href="#[^"]+"/

    Tu peux tester ici tes regex
    http://www.annuaire-info.com/expression-reguliere.html

    Je travaille avec perl et ses regex donc je ne sais pas les regex en php.
    1
  2. Alea
     
    Euh petite précision: c'est le a href="#....." que je souhaite récupérer en fait. (en sachant qu'après le "#" il y a des caractères soit alphabétiques, soit numériques, soit les 2)
    0
  3. Alea
     
    Merci beaucoup! Je vais voir ça...
    Mais ça fait partie de la difficulté du truc de ne pas savoir à l'avance le texte qu'il y aura dans cette partie.
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      ça fait partie de la difficulté du truc de ne pas savoir à l'avance le texte qu'il y aura dans cette partie.

      En général on utilise les regex pour trouver des correspondances (des motifs dans une chaîne de caractères) ou dans un test boolean.

      Si m// correspond Alors

      fait quelque chose

      Dans ton cas tu veux récuperer de texte donc il faut savoir la structure de texte pour pouvoir exploiter mieux les regex. Et, crois moi que je ne dit pas comme ça pour parler.
      0
  4. Alea
     
    Ben le problème c'est que je suis censée faire un automate.Qui dit automate dit automatique.
    Cet automate peut analyser n'importe quel code html et le truc, c'est que ce qui est contenu dans "a href=#....", bah ça peut varier. C'est selon ce que le créateur du site aura marqué dedans.
    Ya pas possibilité de dire en expression régulière de récupérer ce qu'il y a entre guillemets lorsque c'est après "a href"?
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Ya pas possibilité de dire en expression régulière de récupérer ce qu'il y a entre guillemets lorsque c'est après "a href"?

      Oui c'est ça que je t'ai donné. Maintenant je ne sais pas comment on fait les captures en php. En perl on utilise les ( )

      a href="#[^"]+"

      Ex pour perl

      a href=("#[^"]+") la ( ) est capturé dans la variable $1
      je vais traduire

      trouve a suis d'un espace suis de h de r de e de f de = de " de # de tout caractère qui n'est pas " une fois minimum et " à la fin
      -1
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alea
     
    Ou sinon de dire de récuperer lorsqu'il y a --> a href="#
    0
  7. Alea
     
    Arf ça marche pas, ya un problème au niveau des guillemets et des délimiteurs.
    Pour les captures, en php si j'ai bien compris c'est avec la fonction preg match all, on met en paramètre un tableau et après, la fonction le remplit pour chaque élément trouvé (enfin je crois).
    Mais là en fait j'ai testé et il ne reconnaît pas quand il y a plus de deux ", après il met en commentaires... j'ai testé avec ' mais je ne suis pas sûre que ça le prenne en compte car ça ne marche pas...
    Enfin merci de toute aide en tout cas ^^
    0
  8. Alea
     
    Ahhh mais si en fait ça marche! J'avais oublié de mettre les / au début et à la fin! Miracle, merci beaucoup!!!
    0
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      je t'ai donné que la regex
      a href="#[^"]+"
      je suis désolé que j'ai oublié de te dire qu'il faut la mettre entre //

      Donc /regex/

      Si ça marche tant mieux, je suis content pour toi.
      Avec les regex on peut faire des choses surprenantes.

      Bonne continuation,

      lami20j
      0