正则表达式和变量

时间:2012-03-14 17:42:08

标签: php mysql regex

我有这种形式,输出一些字母和一个字长。但是我从数据库中获得正确的输出时遇到了一些问题。

   if ($_SERVER['REQUEST_METHOD'] == 'POST') {
        $letters = mysql_real_escape_string($_POST['letters']);
        $length = mysql_real_escape_string($_POST['length']);
        echo "Letters: $letters";
        echo "Lengte: $length";
        $res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{$length}' ")
         or die ('Error: '.mysql_error ());
        while ($row=mysql_fetch_array($res)){
            echo $row['word'];
            echo "<br />";
        }
     }
     else {
         echo "Foutje";
     }

如果我将$ length更改为我的脚本工作的表单输入的整数。复制/粘贴[$ letters] 6次也可以。我猜引号有问题,但我完全无法弄清楚究竟是什么。

谁能看到我做错了什么? 感谢。

2 个答案:

答案 0 :(得分:0)

PHP正在将{}解释为变量内部的分隔符,因为您使用的是双引号字符串。用连接改变你的引用:

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[" . $letters . "]{" . $length ."}'")

或者在双引号字符串中加倍{},以便将外部对解释为文字。

$res=mysql_query("SELECT word FROM words WHERE word REGEXP '[$letters]{{$length}}' ")

注意,您还应验证$length是否包含正整数。

if (!ctype_digit($length)) {
  // error - length must be an int
}

答案 1 :(得分:0)

尝试这样做:

res=mysql_query("SELECT word FROM words WHERE word REGEXP '[".$letters."]{".$length."}' ")

我有一种预感,即$正在被解释为正则表达式的一部分