我一直在努力去理解正则表达式,但无论如何都要亲自动手。 我遇到了这个问题...
$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之后放了一个空格,它就匹配了。甚至上面的换行符中的换行符都没有触发匹配?
答案 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样本,它们很有趣。
祝你好运,我希望这会有所帮助。