我正在尝试定义正则表达式以从任何选择查询中获取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”之后可以是任何字符串,也是空字符串,整个查询可以是多行字符串。
你能帮助我吗?
谢谢
答案 0 :(得分:3)
这是因为(.)*
这将捕获第4组中的最后一个匹配字符。
它应该是(.*)
更好的正则表达式
^\s*select .+ from (.*)$
替换为
select count(*) from $1