const regex = new RegExp('(?:(?i)WHERE|AND|OR) \\(?([a-zA-Z0-9]+)', 'gm')
const str = `
return all strings (a-zA-Z0-9) of any length that
start right after one of the following expressions: "WHERE ", "AND ", "OR ", "WHERE (", "AND (", "OR (" and
end right before one of the following expressions: "=", ">", "<", "LIKE", "NOT")
all these expressions should be case-insensitive.
I was playing around with the following online regex-tester: https://www.phpliveregex.com/#tab-preg-match-all. However, the closest I got was this, as I dont know how to get multiple matches:
preg_match_all('/^[where|and|or|\\(]* ([a-zA-Z0-1]*)[ |=|<|<=|>|>=|or|in]*.*\$/', \$input_lines, \$output_array);
Some example SQL-queries:
SHOULD RETURN
WHERE var1=1 AND var2=1 => var1; var2
WHERE var2 IN (1, 2, 3) OR var3=2 => var2; var3
WHERE (var4 like '%test%' and var5 NOT LIKE '%test%') => var4; var5
WHERE var6 = 'test' AnD var7='test2' => var6; var7`;
// Reset `lastIndex` if this regex is defined globally
// regex.lastIndex = 0;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for JavaScript, please visit: https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/Regular_Expressions