Beefy Boxes and Bandwidth Generously Provided by pair Networks
P is for Practical
 
PerlMonks  

Re: Regex Conundrum

by SciDude (Friar)
on Jun 12, 2004 at 19:38 UTC ( #363646=note: print w/ replies, xml ) Need Help??


in reply to Regex Conundrum

There is a standard solution to this problem, mostly from Mastering Regular Expressions:

# You need to match a double quoted string with the following regex # [^"\\]*(\\.[^"\\]*)*",? # # But to get the text between double quotes use some ( ) # ([^"\\]*(\\.[^"\\]*)*)",? # gets text inside quotes as $1 # # but you also have non quoted fields, thus # ([^,]+),? # which should match things optionally followed by a comma # # and then a match for separation commas # , # # this must be repeated with m/.../g

Before attempting this yourself, take at look at Text::ParseWords and the quotewords routine. This should solve your problem. If the module is not available to you then the following untested code from Mastering Regular Expressions should work:

@fields = (); while ($text =~ m/"([^"\\]*(\\.[^"\\]*)*)",?|([^,]+),?|,/g { push (@fields, defined ($1) ? $1 : $3) ; } push (@fields, undef) if $text =~ m/,$/; # Account for the special cas +e of an empty last field. # all data is now in @fields

Note: untested.


SciDude
The first dog barks... all other dogs bark at the first dog.


Comment on Re: Regex Conundrum
Select or Download Code

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://363646]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (7)
As of 2015-07-31 03:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (274 votes), past polls