Регулярка, ищущая 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
                             )

Уже кучу способов попробовал, искал в интернете, никак не могу решить эту проблему. Буду благодарен если так же дадите ресурс где можно подробнее изучить регулярки и больше не сталкиваться с такими проблемами.


Ответы (0 шт):