0

我正在尝试定义一个正则表达式以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”后面可以是任意字符串,也可以是空字符串,整个查询可以是多行字符串。

你能帮助我吗?

谢谢

4

1 回答 1

3

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

更好的正则表达式是

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

用。。。来代替

select count(*) from $1
于 2013-02-13T12:35:44.470 回答