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
A voir également:

8 réponses

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
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
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
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
flyzi Messages postés 89 Statut Membre 3
 
je ne veux pas conserver le back slash en fait. (comme tu avais marqué avant ça me semblait correct.

a coup sur c'est un problème d'encodage mais je ne sais pas trop où est exactement le problème.

Tu as regardé le fichier exploité ?
http://fr.wikipedia.org/w/index.php?title=1er_février&action=raw

merci d'avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
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
flyzi Messages postés 89 Statut Membre 3
 
0
flyzi Messages postés 89 Statut Membre 3
 
%s correspond à ma variable $search.

$search=1er_février
0
flyzi Messages postés 89 Statut Membre 3
 
ça peut venir d'où ce problème ?
0
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
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