in reply to string parsing with split

Use a lookahead:

$s = q[key1=val1 key2=val2 key3=val3 key4="val4a val4b" key5="val5key= +(0 1 2 3)" key6=(val6a val6b)];; @a = split " (?=key)", $s;; print for @a;; key1=val1 key2=val2 key3=val3 key4="val4a val4b" key5="val5key=(0 1 2 3)" key6=(val6a val6b)

Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

Replies are listed 'Best First'.
Re^2: string parsing with split
by MeatLips (Novice) on Jan 24, 2011 at 21:27 UTC

    This would seem to work if I literally had the word "key" in the string. I was using that as an example. The actual string has different words that are not the same.

    Here's something that looks a bit closer to the actual string:

    platform=linux hpfFamily=hwseries npsFamily=SWseries rackcnt=1 SPAs=1 SPUpSPA=6 CPUs=6 shrParts="/part1 /home/part2" maintIface="eth2" DEncpSPA=4 nDEncs=4 npsMName="SystemName" portnums="ports=(0 1 2 3)" ints=(eth0 eth1)
      Here's something that looks a bit closer to the actual string:

      Then here's something that may be a bit closer to a working solution for you?

      $s = q[platform=linux hpfFamily=hwseries npsFamily=SWseries rackcnt=1 +SPAs=1 SPUpSPA=6 CPUs=6 shrParts="/part1 /home/part2" maintIface="eth +2" DEncpSPA=4 nDEncs=4 npsMName="SystemName" portnums="ports=(0 1 2 3 +)" ints=(eth0 eth1)];; print for split ' (?=\w+=)', $s;; platform=linux hpfFamily=hwseries npsFamily=SWseries rackcnt=1 SPAs=1 SPUpSPA=6 CPUs=6 shrParts="/part1 /home/part2" maintIface="eth2" DEncpSPA=4 nDEncs=4 npsMName="SystemName" portnums="ports=(0 1 2 3)" ints=(eth0 eth1)

      Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
      "Science is about questioning the status quo. Questioning authority".
      In the absence of evidence, opinion is indistinguishable from prejudice.
        @a = split ' (?=\w+=)', $s;;

        That was just what I needed! Thank you!