La langue est Ruby, voici ma session irbPourquoi la dernière expression de mon expression régulière concatène-t-elle avec la première?
expr = /\Aselect from (\D+)(?: (?:where|&&) (\D+) (\S+) (\S+))*(?: order by (\D+) (asc|desc))?\Z/
=> /\Aselect from (\D+)(?: (?:where|&&) (\D+) (\S+) (\S+))*(?: order by (\D+) (asc|desc))?\Z/
/> str = "select from Entity order by value desc"
=> "select from Entity order by value desc"
/> expr =~ str
=> 0
/> $1
=> "Entity order by value desc"
/> $2
=> nil
Je ne comprends pas pourquoi je reçois « pour l'entité en valeur desc » $ 1. Le comportement souhaité ici serait d'obtenir $ 1 => "Entity", $ 2 => "value", $ 3 => "desc". Qu'est-ce que je fais mal? Comment puis-je modifier cette expression régulière pour obtenir ces résultats?
Merci