0

使用它时我不断收到错误,我不知道为什么。任何帮助都会很棒。我已经用谷歌搜索并找到了示例,但即使使用其他人的示例,我也会遇到错误。

$statement = $list[$i];
echo $statement;
preg_match("/$statement/i", $q)

我也试过这个,但都不起作用:

$statement = '/' . $list[$i] . '/i';
echo $statement;
preg_match($statement, $q)

我得到的错误是:

警告:preg_match() [function.preg-match]:编译失败:在偏移量 0 处没有可重复的内容

当我回显时,$statement我得到:("/Who/i"不带引号)

4

1 回答 1

3

确保其中的任何$statement内容实际上都会产生一个有效的正则表达式,例如

$statement = '(a|'; // note lack of closing )
preg_match("/$statement/", $text);

实际上会产生正则表达式

/(a|/

这是无效的,因为没有关闭)来完成捕获组。您可以通过以下方式解决此问题:

$statement = preg_quote('(a|');
             ^^^^^^^^^^

这将转义任何正则表达式元字符,以便您最终生成有效的正则表达式。

从本质上讲,您可能正遭受相当于 SQL 注入攻击的正则表达式。

于 2013-07-03T19:38:34.503 回答