php preg_match以关键字开头


php preg_match starts with keyword

当然是一个简单的问题,但我无法解决。。。

我只想检测我的sql查询是否以"select"或其他任何字符开头。这个代码似乎不起作用:

if (preg_match("/^(select)/i", $sql) > 0)
{
// SELECT query
}
else
{
// other query
}

谢谢你的帮助!

[编辑]好的,我有根本原因:我可能在关键字"select"之前有空格、制表符和换行符。。。

不需要正则表达式,请使用stripos

$query = "SELECT * FROM table WHERE field = 1";
if (stripos(trim($query), "SELECT") === 0)
    echo "Query begins with $str";
else
    echo "Query DOES NOT begin with $str";
// Notice: trim() will remove whitespace before and after your $query string.

Ex:http://ideone.com/hLaBq

或者,如果你想坚持preg_match:

if (preg_match("/^select (.*)/i", trim($query)) > 0) {
    //...

Ex:http://ideone.com/fzh2I

尝试:

if (preg_match("/^[[:space:]]*select/i", $sql))

这将匹配起始和select之间的任何(或没有)空白,因此会考虑您的空格、制表符等。

更新,你的系统上可能是这样的:

if (preg_match("/^'s*select/i", $sql))

好的,我得到了:

preg_match("/['s]*(select)/i", $sql)

无论如何,谢谢你的回答!