【发布时间】:2017-03-23 23:40:05
【问题描述】:
有一个这样的查询字符串:
select a.* from a
select * from a
这应该是不允许和匹配的!
但是:-)
select count(*), a.id from a
select a.id, count( * ) from a
这应该被允许并且不匹配!
由于我的正则表达式知识贫乏,我有以下正则表达式...
\bselect\b.*?(\*|\.\*).*?(?=\bfrom\b)
这个正则表达式与 * 或 .* 配合得很好,但我仍在努力解决允许的“count(*)”字段选择。
Regex 不是最受青睐的部分,我试图弄清楚正面和负面的 LookBehinds/LookAHeads... 这仍然让我感到困惑 :-D
有什么提示吗?
【问题讨论】:
-
应该,不应该匹配的规则是什么?正则表达式在 PHP 或 mysql 中使用?也许
^\bselect[^,]+from.*$? -
为了理解正确,这是在PHP中使用正则表达式创建SQL解析器?
-
你是对的。它是一个用 PHP 编写的 SQL 解析器。我只是想防止该死的 * 或 .* ;-)
-
select 6 * b from a呢?