in reply to Parsing, tokens and strings

my @words = /("[^"]*"|'[^']*'|\S+)/g;

-- Randal L. Schwartz, Perl hacker

Replies are listed 'Best First'.
Re: Re: Parsing, tokens and strings
by Anonymous Monk on Oct 17, 2001 at 20:59 UTC
    According to my understanding of the original poster's goal, this is NOT the solution to his problem. Contrary to the poster's statement that he needs to make split "quote aware", I think he really wants to make it quote UN-aware, so that he can treat quotes as another delimiter character (this is what the sample assignment statement he offered accomplishes, of the form @array = ( "A", "B" ) being the resulting effect, for an original line of the form A "B"). Unless I'm misunderstanding his intentions, the proper solution would then be something akin to: my @words = split /[\s"']+/ (assuming it's not important to ensure balanced use of quotes)
    Tim Maher tim@consultix-inc.com
      Oops! Now I see that the original poster's sample assignment was not as simple as I had shown, because he had "B C" where I had "B" (multiple quoted words being treated as a single token, vs. my idea of a single word). This being the case, my suggestion of changing split's delimiters will obviously not work, so "nevermind"! 8-}
      Tim Maher tim@consultix-inc.com
Re: Parsing, tokens and strings
by tedv (Pilgrim) on Oct 17, 2001 at 20:48 UTC
    Incidently, for solutions like this, is there an easy way of adding support for escaped quotes like \"?

    -Ted
Re: Re: Parsing, tokens and strings
by JPaul (Hermit) on Oct 17, 2001 at 20:21 UTC
    Ah,
    I'm impressed. The line was somewhat shorter than I had imagined....

    My thanks,
    JP

    -- Alexander Widdlemouse undid his bellybutton and his bum dropped off --

      Heh, I thought the quotes being left in the @array was a "feature", so I:
      foreach (@array) { s/"//g; s/'//g; }
      Thanks all for your help,

      JP Hindin,

      -- Alexander Widdlemouse undid his bellybutton and his bum dropped off --

        somewhat silly to belabor the point, but why not just:
        tr/'"//d for @array;

        -Blake

Re: Re: Parsing, tokens and strings
by tommyw (Hermit) on Oct 17, 2001 at 20:27 UTC
    Yup, that'll be a talented regex hacker...