php - 我如何让 PHP/REGEX 匹配所有关键字,而不是任何关键字?

标签 php mysql regex search

我有一个 PHP/mySQL 搜索函数,它在值 $keywords_search 中使用一个或多个关键字。问题是它匹配任何关键字,这意味着如果完成搜索,如果有人搜索“牛奶啤酒”,它返回的结果要么只包含“牛奶”,要么只包含“啤酒”。如何更改它以便结果必须包含字符串中的所有关键字?

代码如下:

$query[] = "((a.name REGEXP '( )*(" . str_replace(' ', ')*( )*(', $keywords_search) . ")( )*') 
OR (a.description REGEXP '( )*(" . str_replace(' ', ')*( )*(', $keywords_search) . ")( )*'))";

非常感谢任何帮助!

最佳答案

您最好将关键字放入规范化的子表中,这样可以使此类搜索变得微不足道。 MySQL 的正则表达式匹配不允许您指定应匹配一系列交替中的多少,它只会告诉您是否匹配其中任何一个。

例如

SELECT count(*) AS cnt
FROM keywords
WHERE keyword IN ('a', 'b', 'c')
GROUP BY id
HAVING (cnt = 3)

只会显示任何特定 ID 都包含所有三个关键字的记录。

使用正则表达式版本和非规范化字符串字段,您必须将关键字拆分为多个单独的正则表达式,并使用 AND

将它们链接起来

例如

SELECT ...
FROM ...
WHERE keyword REGEX ('keyword1') AND keyword REGEX ('keyword2') AND ....

关于php - 我如何让 PHP/REGEX 匹配所有关键字,而不是任何关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10473990/

相关文章:

php - 使用 PHP 分页系统仅显示最后 300 个 MYSQL 结果

java - 正则表达式多重负前瞻

javascript - 针对不同的开闭条件重用 RegExp 子模式?

php - 处理 PHP JSON 对象中的数据

php - 对 PHP 脚本的同时请求

php - 在 SuiteCRM 中使用原始 SQL

MySQL 按索引排序仍使用 FileSort

regex - 查找 CVE 匹配项的正则表达式

php - 无法在 PHP 中启用 mb_string

mysql - 获取每个类别最新 5 篇 WordPress 帖子