Регулярка, ищущая JOIN где в условии соединения используется column = (query LIMIT 1)
У меня есть регулярное выражение JOIN[\s\w\.=<>\(\)]+?\s+\w+\.\w+\s+=\s+\([\s\w\.=<>\(\)]+?LIMIT\s+1\s+\)
Я не могу понять как правильно его написать, чтобы эта часть \([\s\w\.=<>\(\)]+?LIMIT\s+1\s+\) не находилась после WHERE. Так же есть проблема с тем, что берутся все JOIN'ы что находятся выше.
То есть находятся такие вещи
INNER JOIN tmp AS sd
ON sd.col1 = sb.col1
AND sd.col2 = sb.col2
INNER JOIN ins AS rp
ON rp.col4 = sb.col3
AND rp.col3 = (
SELECT
col3
FROM t5 AS t2
WHERE t2.col4 = sb.col3
LIMIT 1
)
и вот такие
INNER JOIN t1 rp
ON rp.col1 = rpa.col2
WHERE rpa.col3 > _par1
OR rpa.col3 = (
SELECT
rpa2.col3
FROM t2 rpa2
WHERE rpa2.col2 = rpa.col2
AND rpa2.col3 <= _par1
ORDER BY
rpa2.col3 DESC
LIMIT 1
);
А нужно находить только
INNER JOIN ins AS rp
ON rp.col4 = sb.col3
AND rp.col3 = (
SELECT
col3
FROM t5 AS t2
WHERE t2.col4 = sb.col3
LIMIT 1
)
Уже кучу способов попробовал, искал в интернете, никак не могу решить эту проблему. Буду благодарен если так же дадите ресурс где можно подробнее изучить регулярки и больше не сталкиваться с такими проблемами.