Path: csiph.com!pasdenom.info!usenet-fr.net!feeder1-2.proxad.net!proxad.net!feeder1-1.proxad.net!cleanfeed2-b.proxad.net!nnrp1-1.free.fr!not-for-mail Newsgroups: fr.comp.os.unix From: Nicolas George Subject: Re: Shell : extraire d'une chaine plusieurs sous-chaines Sender: george@phare.invalid (Nicolas George) X-Newsreader: Flrn (0.9.20070704) References: <10g4rbq$2i1$1@cabale.usenet-fr.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=utf-8 Date: 25 Nov 2025 20:32:12 GMT Lines: 16 Message-ID: <6926124c$0$3355$426a74cc@news.free.fr> Organization: Guest of ProXad - France NNTP-Posting-Date: 25 Nov 2025 21:32:12 CET NNTP-Posting-Host: 129.199.129.80 X-Trace: 1764102732 news-3.free.fr 3355 129.199.129.80:52624 X-Complaints-To: abuse@proxad.net Xref: csiph.com fr.comp.os.unix:8134 Olivier Miakinen , dans le message <10g4rbq$2i1$1@cabale.usenet-fr.net>, a écrit : > Je voudrais extraire chaque partie dans une variable différente. > Quelques exemples : > s="test1xyz27" -> v1="test" v2="1" v3="xyz" v4="27" > s="aa9toto000" -> v1="aa" v2="9" v3="toto" v4="000" > s="x012" -> v1="x" v2="0" v3="" v4="12" En perl, tu mets chaque bout de la regexp qui t'intéresse entre parenthèses et si ça matche tu récupères la sous-chaîne de chaque groupe entre parenthèses dans $1, $2, etc. Et tu les récupères aussi comme résultat de la regexp en contexte liste, donc « my ($x, $y, $t) = /(…)…(…)…(…)/ », que tu peux d'ailleurs mettre dans la condition d'un if. (Et si tu as besoin de mettre des parenthèses pour grouper mais que la sous-chaîne ne t'intéresse pas, tu dois utiliser (?: … ).)