我希望有一个正则表达式,它匹配SQL语句中第一个SELECT和最后一个FROM之间的所有内容。 举几个例子:
SELECT
`t1`.`id`,
`t1`.`created`,
(
SELECT
`t2`.`content`
FROM
`table2` `t2`
WHERE
`t1`.`id` = `t2`.`id`
) `sub`
FROM
`table1` `t1`
在上述声明中,我想匹配:
`t1`.`id`,
`t1`.`created`,
(
SELECT
`t2`.`content`
FROM
`table2` `t2`
WHERE
`t1`.`id` = `t2`.`id`
) `sub`
我自己尝试过这样做,但我无法正常工作。
答案 0 :(得分:2)
您可以使用基本的正则表达式来实现这一目标......
preg_match('~SELECT(.*)FROM~si', $text, $match);
echo $match[1];
答案 1 :(得分:1)
答案 2 :(得分:1)
使用DOTALL修饰符使点也匹配换行符。下面的正则表达式中的\K
会丢弃以前匹配的字符,不会打印。
(?s)SELECT[^\n]*\n\K.*(?=[^\n]*FROM)
OR
(?s)SELECT[^\n]*\n\K.*(?=\n[^\n]*?FROM)