I’m a little lost when it comes to more advanced or lengthy Regex to be honest. I have a query string that I need to match and get the values and the name of query params. The difficulty for me is that the value can be different values and there are, currently, only 4 different query params. Here is an example query string:
foo title:"Foo Bar" -title:other author: (mitchell* OR mike) from:2012-01-01 to: 2012-06-01
The query params are title, author, from and to. The three different values are within double-quotes “Foo Bar”, surrounded with parenthesis (mitchell* OR mike) or a single value 2012-01-01 or other. Notice there is an optional space after the colon also. There also could be a + or – before each param name, -title. The title and author values can have the wildcard.
I’m currently not interested in parsing the value like I don’t need to parse (mitchell* or mike) to know what’s in it, just want to display it as a whole.
How can I, with Regex, parse this string to get the value to the param name that goes along with it?
I can deal with result like:
['title:"Foo Bar"', '-title:other', 'author: (mitchell* OR mike)', 'from:2012-01-01', 'to:2012-06-01']
I do not need to worry about the value that doesn’t have a param name like the foo at the beginning (which could be anywhere in the string), just need to get the param name and value.
Joseph is right. The data you’re giving is very messy, to make it in one regex would be too complicated, IMO, the best way I could think of this is applying 3 different expressions, one for each type you want to search for:
This searches for items starting with left bracket:
This searches for items starting with double quotes:
This searches for other items (items with spaces won’t work):
Probably, there is an easier way of doing it, but this is the way I would do it.