Re: regexp

Pàgina inicial

Reply to this message
Autor: Patrice Karatchentzeff
Data:  
A: jeanluctux
CC: guilde
Assumpte: Re: regexp
Le 20 avril 2009 22:26, jeanluctux <jeanluctux@???> a écrit :
> Patrice Karatchentzeff a écrit :
>> Le 20 avril 2009 16:11, Nicolas Morey-Chaisemartin
>> <devel@???> a écrit :
>>
>> [...]
>>
>> > Je connais pas du tout perl mais si tu force ton premier bloc (chaine 1)
>> > à finir par un caractère non espace tu devrais t'en sortir non?
>> > En gros (.*\S)(\s+)(\d+)
>>
>> Yes... bien vu : merci.
>>
>
>> le .* est trop glouton et comprend les espaces jusqu'au premier chiffre...
>> PK
>
> Je pense aussi que la solution au dessus est élégante.
> Je marque quand même ci-desous une autre .... parce que tu as parlé de gloutonnerie.
>
> Avec ceci :  (.*)(\s+)(\d+)
> le premier membre '(.*)' sera glouton .... parce que c'est le défaut.
> Et puis le deuxième '(\s+)', il est glouton aussi mais il ne lui restera les miettes.
> Donc, un seul espace.
>
> Par contre, avec ceci : (.*?)(\s+)(\d+)
> On donne instruction grâce au '?' au premier membre (.*?) de ne pas être
> glouton. Donc, il se sert la ceinture. Et s'il y a plusieurs espaces,
> c'est le deuxième (\s+), qui lui aussi est glouton qui va tout avaler.
>
> Donc, je pense que (.*?)(\s+)(\d+) devrait marcher aussi.


% perl -E ' "toto to to 123" =~ m/(.*?)(\s+)(\d+)/; say $1,"!" '
toto to to!

oui, c'est joli et cela n'utilise pas d'astuce : juste un réglage
correct du moteur de regex.

Merci

> Sinon, en anglais, ils disent 'greedy' et c'est ce mot clef qu'il faut utiliser pour
> chercher. Moi, je disais plutot "gourmand" en traduction basique mais c'est vrai
> que glouton, ça sonne mieux.


Je crois que glouton est le terme employé dans toutes les traductions
de Perl (y compris le très mauvais (d'un point de vue trad) sur les
regex).

Je ne l'avais évidemment pas sous la main pour chercher la solution.

Je vais la retenir cette fois car j'ai souvent le problème et on n'a
pas toujours une astuce (comme celle proposée par Nicolas) pour s'en
sortir.

PK

-- 
      |\      _,,,---,,_       Patrice KARATCHENTZEFF
ZZZzz /,`.-'`'    -.  ;-;;,_   mailto:p.karatchentzeff@free.fr
     |,4-  ) )-,_. ,\ (  `'-'  http://p.karatchentzeff.free.fr
    '---''(_/--'  `-'\_)