Expression regulière besoin d'aide

flyzi Messages postés 89 Statut Membre -  
heyquem Messages postés 808 Statut Membre -
Bonjour,

Je voudrais afficher toutes les lignes qui commencent par :
* espaceOuNon [ [ digit ]]

j'ai testé ça comme regex, sans succès :
$regex2="#^\* \[\[[[0-9]*\]\]#"

exemple de ligne :
* [[1702]] : Le prince [[Eugène de Savoie]] attaque [[Crémone]].

merci d'avance pour votre aide

8 réponses

  1. swed
     
    Bonjour,

    Sans avoir testé, j'aurais fait : "^\* \[\[[0-9]+\]\]"

    Apparemment, dans ton expression, tu as un "[" en trop ;
    Et je ne comprend pas pourquoi tu as mis des "#".

    Je te conseille [0-9]+ au lieu de [0-9]* ; car il faut au moins un chiffre entre les [].

    Cordialement, M.
    1
    1. flyzi Messages postés 89 Statut Membre 3
       
      le # au début et la fin de l'expression c'est pour éviter l'erreur php :

      Warning: preg_match() [function.preg-match]: No ending delimiter '^'
      0
  2. swed
     
    Re,

    Je ne connais pas bien le PHP mais je suppose que le '\' est un "escape character" ; et donc qu'il faut le doubler pour qu'il soit conservé...

    Je suppose que si tu affiche le contenu de $regex2, tu n'auras pas ton expression régulière.

    Il faudrait donc affecter ta chaîne comme ça :
    $regex2="^\\* \\[\\[[0-9]+\\]\\]"

    Qu'en penses-tu ?

    Cordialement, M.
    1
  3. flyzi Messages postés 89 Statut Membre 3
     
    ça ne fonctionne pas. On dirait que aucune de mes lignes ne commencent par * et pourtant je ne rêve pas :
    -> http://fr.wikipedia.org/w/index.php?title=%s&action=raw

    voici mon code (permet de récupérer des dates sur wikipedia) :
    $search="1er_février";
    $url = sprintf('http://fr.wikipedia.org/w/index.php?title=%s&action=raw', urlencode($search));
    $ch=curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_USERAGENT, 'http://mondomaine.fr');

    $result = curl_exec($ch);
    curl_close($ch);

    $result=nl2br($result); //ajoute de <br /> à la fin de chaque ligne
    $result=explode("<br />",$result); //on sépare chaque ligne

    $regex2="#^\* \[\[[0-9]+\]\]#" ;

    //on parcours se tableau
    foreach($result as $ligne) {

    if(preg_match($regex2,$ligne)) {
    echo $ligne.'<br />';
    }
    }

    merci d'avance
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. heyquem Messages postés 808 Statut Membre 131
     
    please, donne une autre adresse que

    http://fr.wikipedia.org/w/index.php?title=%s&action=raw

    je n'obtiens que

    #REDIRECT [[Wikipédia:Accueil principal]]

    lorsque je clique sur ton lien ou le mets dans la barre d'adresse
    0
    1. flyzi Messages postés 89 Statut Membre 3
       
      %s correspond à ma variable $search.

      $search=1er_février
      0
  6. flyzi Messages postés 89 Statut Membre 3
     
    ça peut venir d'où ce problème ?
    0
  7. heyquem Messages postés 808 Statut Membre 131
     
    a coup sur c'est un problème d'encodage mais je ne sais pas trop où est exactement le problème.

    Si tu ne « sais pas trop où est exactement le problème. » ,
    tu ne peux pas affirmer qu' « à coup sûr c'est un problème d'encodage »

    Je ne vois pas pourquoi ce serait un problème d'encodage.
    L'étoile * et les parenthéses droites [ et ] font partie de l'ASCII :
    * code 42
    { code 91
    ] code 93
    Ces caractères n'ont donc pas d'autres codes dans d'autres encodages.

    Merci pour le lien. J'aurais dû mieux regarder, il est évident que %s est un machin de formatage.

    Je vais regarder le problème tout de suite. Ça m'intrigue, la RE $regex2="#^\* \[\[[0-9]+\]\]#" qu'il y a dans ton code me paraît correcte.
    0
  8. heyquem Messages postés 808 Statut Membre 131
     
    ^ est une assertion qui n'est vraie que si elle est placée tout au début de la chaîne
    (...)

    La signification de ^ peut changer, de manière à l'amener à ce qu'il puisse se trouver immédiatement avant et immédiatement après un caractère de nouvelle ligne "\n". Cela se fait en ajoutant l'option PCRE_MULTILINE au moment de la compilation ou de l'exécution.

    https://www.php.net/manual/fr/regexp.reference.anchors.php
    0