Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

pattern matching question



Hello,
I have an array, for example: 

local -a list
list=("... one giraffe ..." "... two cows ..." "... one monkey ..." "...  three lemmings ...")

("..." can represent anything)

and I want to get parts of each item each time a specific pattern 
occurs. For example, I want to get the word after "one". I therefore 
want to finish with an array containing ("giraffe" "monkey")

I found a way with a loop :

local -a secondlist
local item

for item in $list; do
    if [[ $item = (#b)*one\ ([a-z]#)* ]]; then
        secondlist=($secondlist $match[1])
    fi
done
print -l $secondlist

Great, works fine.
But I was wondering if there was something more zsh-ish that could allow 
me to do it in one instruction.

I found :

print -l ${${(M)list##*one ([a-z]#)*}//(#b)*one ([a-z]#)*/$match[1]}

but I think this is inefficient as the pattern has to be evaluated 
twice.

What would be the better way to do that ?

thanks

Attachment: signature.asc
Description: Digital signature



Messages sorted by: Reverse Date, Date, Thread, Author