From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5279 invoked from network); 21 Jun 2004 16:29:47 -0000 Received: from thor.dotsrc.org (HELO a.mx.sunsite.dk) (130.225.247.86) by ns1.primenet.com.au with SMTP; 21 Jun 2004 16:29:47 -0000 Received: (qmail 18677 invoked from network); 21 Jun 2004 16:29:25 -0000 Received: from sunsite.dk (130.225.247.90) by a.mx.sunsite.dk with SMTP; 21 Jun 2004 16:29:25 -0000 Received: (qmail 26853 invoked by alias); 21 Jun 2004 16:28:53 -0000 Mailing-List: contact zsh-users-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 7580 Received: (qmail 26843 invoked from network); 21 Jun 2004 16:28:53 -0000 Received: from thor.dotsrc.org (HELO a.mx.sunsite.dk) (qmailr@130.225.247.86) by sunsite.dk with SMTP; 21 Jun 2004 16:28:50 -0000 Received: (qmail 17542 invoked from network); 21 Jun 2004 16:28:49 -0000 Received: from unknown (HELO moonbase.zanshin.com) (root@167.160.213.139) by a.mx.sunsite.dk with SMTP; 21 Jun 2004 16:28:48 -0000 Received: from toltec.zanshin.com (toltec.zanshin.com [64.84.47.166]) by moonbase.zanshin.com (8.12.11/8.12.11) with ESMTP id i5LGSkpA010029 for ; Mon, 21 Jun 2004 09:28:46 -0700 Date: Mon, 21 Jun 2004 09:28:46 -0700 (PDT) From: Bart Schaefer Sender: schaefer@toltec.zanshin.com Reply-To: zsh-users@sunsite.dk To: zsh-users@sunsite.dk Subject: Re: Extracting Informations from strings In-Reply-To: <200406210933.i5L9XaKc003031@news01.csr.com> Message-ID: MIME-Version: 1.0 Content-Type: TEXT/PLAIN; charset=US-ASCII X-Spam-Checker-Version: SpamAssassin 2.63 on a.mx.sunsite.dk X-Spam-Level: X-Spam-Status: No, hits=0.0 required=6.0 tests=none autolearn=no version=2.63 X-Spam-Hits: 0.0 On Mon, 21 Jun 2004, Peter Stephenson wrote: > Stefan =?iso-8859-1?Q?Reich=F6r?= wrote: > > Battery 1: charging, 95%, charging at zero rate - will never fully charge. > > > > I want to extract the "95%" from the output above. > > setopt extendedglob > local match mbegin mend > if [[ $string = (#b)"Battery "*" charging, "(<->)"%"* ]]; then > print "Charge is ${match[1]}%" > fi To do this without extendedglob and backreferences is, I think, simpler: print Charge is ${(M)${(M)string%%<->%,*}##<->%} This is (where <-> matches a string of digits): ${(M)string%%<->%,*} Longest suffix beginning with <->% ${(M)...##<->%} Longest prefix of that matching <->% I'd only resort to backreferences when the substring to be extracted is ambiguous (e.g. "... charging, 95%, charging at 17%, ...") or when extracting multiple fields (e.g. both the battery number and the charge percentage).