首页 > 解决方案 > 如何以正确的方式在 foreach 中实现 REGEXP?

问题描述

您好,如何在此代码中以正确的方式添加正则表达式以便在数据库中搜索确切的单词?

$condition = '';
$name = "he  is mad";
$query = explode(" ", $name);
foreach($query as $text) {
    $condition .= "test LIKE '%".mysqli_real_escape_string($conn, $text)."%' OR ";
}

$condition = rtrim($condition, " OR ");

$sql_query = "SELECT * FROM test WHERE " . $condition;
$result = mysqli_query($conn, $sql_query);
if ($result->num_rows > 0) {
    echo "1";
} else {
    echo "0";
}
$conn->close();

我想将此添加到php代码中

SELECT 
    *
FROM
    `table`
WHERE
    Description regexp '(^|[[:space:]])pen([[:space:]]|$)';

没有foreach,它只适用于我:

    $sql_query = "SELECT * FROM test WHERE test regexp '(^|[[:space:]])$condition([[:space:]]|$)'";

标签: phpsql

解决方案


如果您有一个由空格分隔的短语,并且您想查看这些单词是否有任何重叠,您可以使用正则表达式:

where col regexp replace($name, ' ', '|')

请注意,您应该$name作为参数传入。

如果您关心单词边界,可以将它们引入正则表达式。然而,确切的形式可能取决于 MySQL 使用的正则表达式库。这个想法是:

where col regexp concat('\\b', replace($name, ' ', '\\b|\\b'), '\\b')

推荐阅读