preg_match和结尾的空间

时间:2013-11-20 07:01:00

标签: regex preg-match space

我一直在努力去理解正则表达式,但无论如何都要亲自动手。 我遇到了这个问题...

$str_sql = "SELECT";
if(preg_match("/^(select|describe|pragma) /i", $str_sql)) { 
    print "match";
} else {
    print "no match";
}

这表示“不匹配”。但是,如果我将其更改为:

$str_sql = "SELECT ";

这表示“匹配”。我也尝试使用+ $ / * $ / \ b,但似乎都没有。

是的,你永远不会遇到你的SQL就是这样的情况,但它也与此不匹配......这在我的代码中更常见,因为我喜欢这样做以便于阅读。

$str_sql = "SELECT
column1, col2....
FROM table";

一旦我在SELECT之后放了一个空格,它就匹配了。甚至上面的换行符中的换行符都没有触发匹配?

3 个答案:

答案 0 :(得分:1)

使用:

if(preg_match("/^(select|describe|pragma)\b/i", $str_sql))

\b匹配任何字边界。

答案 1 :(得分:0)

而不是空间使用\s匹配任何空格,包括space, tab, new-line

preg_match("/^(select|describe|pragma)\s+/i"

答案 2 :(得分:0)

在你的情况下你可以这样做:

if(preg_match("/^(select|describe|pragma).*$/", $str_sql))

单词可以包含或不包含其他单词,字符或空格,例如:

  • “选择”
  • “选择*来自”
  • “选择”

所有人都会匹配。您也可以使用:

如果(P reg_match("/^(select|describe|pragma)\s?$/", $str_sql))

单词可以包含也可以不包含一个空格,制表符或换行符。

我建议您使用像RegexBuddy这样的工具,它非常有用,您也可以查看RegexBuddy样本,它们很有趣。

祝你好运,我希望这会有所帮助。