In this example source string:
index1 = "searchterm1" AND (index2 any "\"value2.1\" \"value2.2 AND sometext\" \"value2.3 OR sometext\"") OR index3 = "searchterm3"
The source needs to be splitted by the following bold text:
index1 = "searchterm1" AND (index2 any "\"value2.1\" \"value2.2 AND sometext\" \"value2.3 OR sometext\"") OR index3 = "searchterm3"
I expect this to be the result:
match 1 with group 1: index1 = "searchterm1"
match 2 with group 1: AND and group 2:(index2 any "\"value2.1\" \"value2.2 AND sometext\" \"value2.3
match 3 with group 1: OR and group 2: sometext\"") OR index3 = "searchterm3"
I tried i.e. this: \b(AND|OR)(?=([^\"]*\"[^\"]*\")*[^\"]*$) but those escaped quotes are giving me a hard time.
CodePudding user response:
You can use the following regex:
(AND|OR|^).*?(?:\1.*?)*(?=(AND|OR|$))
It will match:
(AND|OR|^): AND, OR or the start of string symbol.*?: the least amount of characters that are followed by(?:\1.*?)*: the same AND, OR sequence of characters and the any other characters - optionally(?=(AND|OR|$)): AND, OR or the end of string symbol
Check the demo here.
