le 06/10/2012 à 10:49, kurtz le pirate a écrit dans le message :
j'ai des données de cette forme : #declare elements[1][17][SYMBOLE]="Ne";
le but est de récupérer les indices entre crochets et le texte entre guillemet.
bien sur l'expression : (.*)[(d)][(dd)][(.*)]="(.*)" ne fonctionne pas.
Normal puisque [(d)] est équivalent à d
un peux plus élaboré : (.*?)[(d)][(dd)][(.*?)]="(.*)" ne fonctionne pas mieux
Normal puisque .* veut dire zéro ou plus de n'importe quoi et lorsque tu rajoutes ? derrière, ça veut dire le plus petit de zéro ou plus soit zéro.
.*? = rien (enfin ça marche tout le temps mais ça ne représente rien) .+? = .
Je pense que tu voudrais plutôt [([^]]*)] => je prends tout jusqu'à ce que je rencontre un « ] ».
-- Benoit Izac
espie
In article , kurtz le pirate wrote:
bonjour,
j'ai un problème avec les regexpr gourmandes.
j'ai des données de cette forme : #declare elements[1][17][SYMBOLE]="Ne";
le but est de récupérer les indices entre crochets et le texte entre guillemet.
bien sur l'expression : (.*)[(d)][(dd)][(.*)]="(.*)" ne fonctionne pas.
un peux plus élaboré : (.*?)[(d)][(dd)][(.*?)]="(.*)" ne fonctionne pas mieux
deja, la capture du premier indice ne fonctionne avec .*?[(d)]
Ton probleme est mal ficele... tu veux matcher quoi ? parce qu'ici, ca marche et ca donne le resultat attendu.
Pour le premier .*?, ca va evidemment capturer toute la chaine jusqu'au premier [: les expressions regulieres, meme minimales, ne reviennent pas "en arriere": elle sont gloutonnes des le debut.
Je soupconne que tes donnees sont delimitees par des mots.
Essaie un truc comme b(w*?)[(d+)][(d+)][(.*?)]="(.*)" ca devrait etre mieux.
si tes donnees ont toujours exactement la meme tete, pense a ancrer tes expressions des deux cotes, et a mieux preciser ce que tu veux:
^#declares+(w*)[(d+)][(d+)][(.*?)]="(.*)"$
In article <kurtzlepirate-EA346F.10490506102012@news-3.proxad.net>,
kurtz le pirate <kurtzlepirate@yahoo.fr> wrote:
bonjour,
j'ai un problème avec les regexpr gourmandes.
j'ai des données de cette forme :
#declare elements[1][17][SYMBOLE]="Ne";
le but est de récupérer les indices entre crochets et le texte entre
guillemet.
bien sur l'expression :
(.*)[(d)][(dd)][(.*)]="(.*)"
ne fonctionne pas.
un peux plus élaboré :
(.*?)[(d)][(dd)][(.*?)]="(.*)"
ne fonctionne pas mieux
deja, la capture du premier indice ne fonctionne avec
.*?[(d)]
Ton probleme est mal ficele... tu veux matcher quoi ? parce qu'ici,
ca marche et ca donne le resultat attendu.
Pour le premier .*?, ca va evidemment capturer toute la chaine jusqu'au
premier [: les expressions regulieres, meme minimales, ne reviennent pas
"en arriere": elle sont gloutonnes des le debut.
Je soupconne que tes donnees sont delimitees par des mots.
Essaie un truc comme
b(w*?)[(d+)][(d+)][(.*?)]="(.*)"
ca devrait etre mieux.
si tes donnees ont toujours exactement la meme tete, pense a ancrer
tes expressions des deux cotes, et a mieux preciser ce que tu veux:
j'ai des données de cette forme : #declare elements[1][17][SYMBOLE]="Ne";
le but est de récupérer les indices entre crochets et le texte entre guillemet.
bien sur l'expression : (.*)[(d)][(dd)][(.*)]="(.*)" ne fonctionne pas.
un peux plus élaboré : (.*?)[(d)][(dd)][(.*?)]="(.*)" ne fonctionne pas mieux
deja, la capture du premier indice ne fonctionne avec .*?[(d)]
Ton probleme est mal ficele... tu veux matcher quoi ? parce qu'ici, ca marche et ca donne le resultat attendu.
Pour le premier .*?, ca va evidemment capturer toute la chaine jusqu'au premier [: les expressions regulieres, meme minimales, ne reviennent pas "en arriere": elle sont gloutonnes des le debut.
Je soupconne que tes donnees sont delimitees par des mots.
Essaie un truc comme b(w*?)[(d+)][(d+)][(.*?)]="(.*)" ca devrait etre mieux.
si tes donnees ont toujours exactement la meme tete, pense a ancrer tes expressions des deux cotes, et a mieux preciser ce que tu veux:
^#declares+(w*)[(d+)][(d+)][(.*?)]="(.*)"$
Nicolas George
Benoit Izac , dans le message , a écrit :
Normal puisque .* veut dire zéro ou plus de n'importe quoi et lorsque tu rajoutes ? derrière, ça veut dire le plus petit de zéro ou plus soit zéro.
Non, pas forcément : c'est le plus petit parmi ceux qui permettent de continuer le matching :
il faut maintenant que j'arrive à capturer entre des "".
C'est le plus simple, si tu n'as qu'une seule paire de guillemets. Par exemple : /"(.*)"/
kurtz le pirate
In article <k4pl49$2isb$, Olivier Miakinen <om+ wrote:
Le 06/10/2012 12:10, kurtz le pirate a écrit : > à partir de : > > #declare elements[1][17][SYMBOLE]="Ne"; > > je veux recupérer : > > 1 > 17 > SYMBOLE > Ne > > [...] > > il faut maintenant que j'arrive à capturer entre des "".
C'est le plus simple, si tu n'as qu'une seule paire de guillemets. Par exemple : /"(.*)"/
effectivement, c'est le plus simple. tout est ok maintenant. ma solution est donc :
my @result = (m/[(.*?)][(.*?)][(.*?)]="(.*?)"/);
merci -- klp
In article <k4pl49$2isb$1@cabale.usenet-fr.net>,
Olivier Miakinen <om+news@miakinen.net> wrote:
Le 06/10/2012 12:10, kurtz le pirate a écrit :
> à partir de :
>
> #declare elements[1][17][SYMBOLE]="Ne";
>
> je veux recupérer :
>
> 1
> 17
> SYMBOLE
> Ne
>
> [...]
>
> il faut maintenant que j'arrive à capturer entre des "".
C'est le plus simple, si tu n'as qu'une seule paire de guillemets.
Par exemple : /"(.*)"/
effectivement, c'est le plus simple.
tout est ok maintenant. ma solution est donc :
In article <k4pl49$2isb$, Olivier Miakinen <om+ wrote:
Le 06/10/2012 12:10, kurtz le pirate a écrit : > à partir de : > > #declare elements[1][17][SYMBOLE]="Ne"; > > je veux recupérer : > > 1 > 17 > SYMBOLE > Ne > > [...] > > il faut maintenant que j'arrive à capturer entre des "".
C'est le plus simple, si tu n'as qu'une seule paire de guillemets. Par exemple : /"(.*)"/
effectivement, c'est le plus simple. tout est ok maintenant. ma solution est donc :