php - 如何以正确的方式在 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:]]|$)'";
解决方案
如果您有一个由空格分隔的短语,并且您想查看这些单词是否有任何重叠,您可以使用正则表达式:
where col regexp replace($name, ' ', '|')
请注意,您应该$name
作为参数传入。
如果您关心单词边界,可以将它们引入正则表达式。然而,确切的形式可能取决于 MySQL 使用的正则表达式库。这个想法是:
where col regexp concat('\\b', replace($name, ' ', '\\b|\\b'), '\\b')
推荐阅读
- database - 如何使用 laravel DB::setDatabaseName?
- swift - 如何循环游戏
- electron - 为什么电子应用可以在 MAC App Store 上发布?
- python - Merging Dataframe with Different Dates?
- fullcalendar - 全日历重叠下拉列表
- php - 现场部署 Laravel Web 应用程序最简单、最快捷的方法是什么?
- reactjs - 当使用 Redux 更改状态时,React 组件不会重新渲染
- exchange-server - 用于安排具有资源的房间的 EWS SOAP 请求未将会议请求发送到资源
- python - 链可迭代带
- android - CropImage 库在片段中不起作用