正则表达式:将select替换为select count

时间:2013-02-13 12:26:37

标签: php regex

我正在尝试定义正则表达式以从任何选择查询中获取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”之后可以是任何字符串,也是空字符串,整个查询可以是多行字符串。

你能帮助我吗?

谢谢

1 个答案:

答案 0 :(得分:3)

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

更好的正则表达式

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

替换为

select count(*) from $1