我正试图定义一个正则表达式,以便从任何选择查询中获得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