正则表达式:将select替换为select计数



我正试图定义一个正则表达式,以便从任何选择查询中获得select count(*)。这是我的代码:

preg_replace("/(select{1}) (.)+ (from{1}) (.)*/im", "'$1 count(*) $3 $4'", "select columna, columnb from table1 join table2 where a=b", -1, $count); 

除了只返回"from"后面的最后一个字符之外,它并没有做得那么糟糕,这是:

select count(*) from b

应该是

select count(*) from table1 join table2 where a=b

后面的"from"可以是任何字符串,也可以是空字符串,整个查询可以是多行字符串。

你能帮我吗?

感谢

这是因为(.)*会捕获第四组中最后一个匹配的字符。应该是(.*)

更好的正则表达式是

^s*select .+ from (.*)$

替换为

select count(*) from $1

最新更新