Douglas Lise
Douglas Lise

Reputation: 1486

How to evaluate a RegExp in an array with match groups?

I need to parse an array-like text with regular expression and get the match groups. One example of then text I want to parse is this:

['red','green', 'blue']

I want to use match groups, because I want to extract them. I am using this regular expression, but the groups found by it are not like what I expected:

\[ *('.+?')( *, *('.+?'))* *\]

The idea is to parse in this order:

And get one group with each parsed array element.

Can you help me?

Hint: a easy way to test regexp is the site http://rubular.com

Upvotes: 0

Views: 201

Answers (3)

Casimir et Hippolyte
Casimir et Hippolyte

Reputation: 89584

You can match an arbitrary number of groups with one regex:

^\[\s*|(?:\G'([^']+)'\s*(?:,\s*|]$))+

or like this (should be more performant):

^\[\s*+|(?>\G'([^']++)'\s*+(?>,\s*+|]$))++

This work in ruby like asked before, in delphi I don't know.

Upvotes: 0

A016090
A016090

Reputation: 529

This isn't going to be a totalitarian answer, but I'm fairly certain you can't whitespace check by doing " *", at least it may depend on the language you're using.

Here's a C# regex example that shows some of the language requirements to check for whitespace: regex check for white space in middle of string

Edit: I see you added Ruby as your language, unfortunately I'm not verbose in Ruby so specifics I cannot help you with, sorry.

Edit2: Seeing as you're forcing yourself into Ruby to debug your regex statement, might I suggest: http://www.debuggex.com/ which tries to stay language independent?

Upvotes: 2

Alan
Alan

Reputation: 3417

Try this regex: '([^']+)', it should give you the following match groups red, green, blue according to rubular.com

Upvotes: 1

Related Questions