【问题标题】:PHP preg_match regex send warning if not find the text如果找不到文本,PHP preg_match 正则表达式会发送警告
【发布时间】:2019-09-16 15:25:00
【问题描述】:

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

这是我的代码:

$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 Warning: preg_match(): Unknown modifier '1' in

$row[sharhe_kala]$row[mark] 为数字时也不回答

例如,如果 $t="KOYO"$p="Ballbearing" 并且用户输入 $text="koyo ballbearing" 它会显示结果及其正常,但如果用户输入 $text="ntn zzz" 它会发送此警告:PHP Warning: preg_match(): Unknown modifier '1' in 如果$t="222"$p="Ballbearing" 和用户输入$text="222 ballbearing"它不显示resault 也不显示任何警告

【问题讨论】:

  • $t$p的内容是什么,我认为它们包含特殊字符。
  • 他们是一些名字(字母)
  • edit your question 并添加可复制的示例。
  • 美元符号 $ 标志着正则表达式检查的结束,因此您的正则表达式必须类似于“/{$p}/i”
  • 为我工作。即使有数值。你在别处有错误。

标签: php regex preg-match


【解决方案1】:

听起来您的变量包含特殊字符,即您用于分隔符的斜线 (/)。尝试preg_quote()'ing 你的变量。例如:

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

【讨论】:

  • 是的,谢谢,使用preg_quote() 后没有警告,但如果$t 或$p 是数字,仍然没有结果
  • @ZaGol 我尝试使用您添加到问题中的值,但它对我有用(请参阅3v4l.org/4SDoK)。问题必须在其他地方或具有不同的值。
  • 你是对的,现在所有条目都可以了。谢谢
【解决方案2】:

来自preg_match

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

【讨论】:

    【解决方案3】:

    您必须转义直接在正则表达式中发送的变量。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-04
      • 2013-04-05
      • 2014-06-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多