PHP preg_match regex如果找不到文本,则发送警告

PHP preg_match regex如果找不到文本,则发送警告,php,regex,preg-match,Php,Regex,Preg Match,我的数据库中有一个表,我想获取表中的记录,并与用户输入的文本进行比较,如果它们匹配,则获取并显示表中该行的其他字段 这是我的代码: $q = "SELECT * FROM Kala2 WHERE 1"; $res = mysqli_query($db, $q); while ($row = mysqli_fetch_assoc($res)) //For each word { $t = $row[sharhe_kala]; $p = $row[mark]; if (preg_m

我的数据库中有一个表,我想获取表中的记录,并与用户输入的文本进行比较,如果它们匹配,则获取并显示表中该行的其他字段

这是我的代码:

$q = "SELECT * FROM Kala2  WHERE 1";
$res = mysqli_query($db, $q);
while ($row = mysqli_fetch_assoc($res)) //For each word
 {
  $t = $row[sharhe_kala];
  $p = $row[mark];

  if (preg_match("/$t/i", $text)) {
       if (preg_match("/$p/i", $text)) {
             *** do something ***
                           }}
它可以工作,但当用户$text输入的单词不在数据库中时,它会发送以下警告:

PHP警告:preg_match:中的未知修饰符“1”

当$row[sharhe_kala]或$row[mark]是数字时,也不会回答

例如,如果$t=KOYO和$p=Ballbearing且用户输入$text=KOYO Ballbearing,则显示重新结果及其ok,但如果用户输入$text=ntn zzz,则其发送此警告:PHP警告:preg_匹配:中的未知修饰符“1” 如果$t=222和$p=Ballbearing且用户输入$text=222 Ballbearing,则不会显示重新结果,也不会显示来自以下位置的任何警告:

此函数可能返回布尔值FALSE,但也可能返回 计算结果为FALSE的非布尔值。请阅读关于 更多信息请参见布尔值。使用===运算符测试 此函数的返回值


听起来变量包含特殊字符,即斜杠/用于分隔符。试着预先设定你的变量。例如:

if (preg_match("/".preg_quote($t, '/')."/i", $text)) {
     if (preg_match("/".preg_quote($p, '/')."/i", $text)) {

必须转义直接在regexp中发送的变量

$text = "222 ballbearing";
$t = 222;
$p = "Ballbearing";

if (preg_match("/{$t}/i", $text)) {
   if (preg_match("/{$p}/i", $text)) {
       echo "Match detected";
   }
}

$t和$p的内容是什么,我认为它们包含特殊字符。它们是一些名称,请添加可复制的示例。美元符号$标记正则表达式检查的结束,因此您的正则表达式在我看来必须类似于/{$p}/iWorks。即使有数值。您在其他地方有一个错误。是的,谢谢,在使用preg_quote后没有警告,但如果$t或$p为numerical@ZaGol我试着使用你添加到问题中的价值观,但它对我有效。问题必须在其他位置或具有不同的值。您是对的,现在所有条目都可以了。非常感谢。