Strange result using String#split

R

Ryan Wallace

I am trying to split a string on all occurrences of ' AND ' except
where it appears within quotes. I have a regular expression which
works but generates strange output in a certain case:

"text_search '(large red spear OR axe) AND wood' AND material
1".split( /(?: AND )?(\S+ '.+')(?: AND )?|(?: AND )/ )

gives:

["", "text_search '(large red spear OR axe) AND wood'", "material 1"]

I don't understand why my regular expression is producing the blank
entry at the beginning of the array. Can anyone lend some insight?

Thanks,
Ryan Wallace
 
S

Sebastian Hungerecker

Ryan said:
"text_search '(large red spear OR axe) AND wood' AND material
1".split( /(?: AND )?(\S+ '.+')(?: AND )?|(?: AND )/ )

gives:

["", "text_search '(large red spear OR axe) AND wood'", "material 1"]

I don't understand why my regular expression is producing the blank
entry at the beginning of the array. Can anyone lend some insight?

"text_search '(large red spear OR axe) AND wood'" is what your regex matches.
"" is what comes before the match and "material 1" is what comes after the
match. If a split-regex matches the beginning of a string, the first item in
the returned array will be "". Compare:
"a1b".split(/1/) => ["a", "b"]
"1b".split(/1/) => ["", "b"]
"1b".split(/(1)/)
=> ["", "1", "b"]

I also notice that you have a greedy quantifier between the '' in the regex.
This will likely cause unwanted result when you have more than one pair of ''
in your string.

HTH,
Sebastian
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,570
Members
45,045
Latest member
DRCM

Latest Threads

Top