php preg_match以关键字开头

时间:2012-02-03 22:36:48

标签: php preg-match keyword

肯定是一个简单的问题,但我无法解决......

我只想检测我的sql查询是以“select”还是其他任何东西开头。 这段代码似乎不起作用:

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

感谢您的帮助!

[编辑] 好的,我有根本原因: 在关键字“select”...

之前,我可能有空格,制表符和换行符

3 个答案:

答案 0 :(得分:7)

不需要正则表达式,请使用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.

http://ideone.com/hLaBq

或者,如果你想坚持使用preg_match

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

http://ideone.com/fzh2I

答案 1 :(得分:2)

尝试:

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

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

更新,可能是您的系统:

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

答案 2 :(得分:2)

好的,我明白了:

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

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