# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility
import re
regex = r"(?:(?i)WHERE|AND|OR) \(?([a-zA-Z0-9]+)"
test_str = ("\n"
" return all strings (a-zA-Z0-9) of any length that\n"
" start right after one of the following expressions: \"WHERE \", \"AND \", \"OR \", \"WHERE (\", \"AND (\", \"OR (\" and\n"
" end right before one of the following expressions: \"=\", \">\", \"<\", \"LIKE\", \"NOT\")\n"
" all these expressions should be case-insensitive.\n\n"
"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:\n\n"
"preg_match_all('/^[where|and|or|\\(]* ([a-zA-Z0-1]*)[ |=|<|<=|>|>=|or|in]*.*$/', $input_lines, $output_array);\n\n"
"Some example SQL-queries:\n\n"
" SHOULD RETURN\n"
"WHERE var1=1 AND var2=1 => var1; var2\n"
"WHERE var2 IN (1, 2, 3) OR var3=2 => var2; var3\n"
"WHERE (var4 like '%test%' and var5 NOT LIKE '%test%') => var4; var5\n"
"WHERE var6 = 'test' AnD var7='test2' => var6; var7")
matches = re.finditer(regex, test_str, re.MULTILINE)
for matchNum, match in enumerate(matches, start=1):
print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))
for groupNum in range(0, len(match.groups())):
groupNum = groupNum + 1
print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))
# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.
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 Python, please visit: https://docs.python.org/3/library/re.html