首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过在单词之间添加特殊字符来搜索单词

问通过在单词之间添加特殊字符来搜索单词
EN

Stack Overflow用户
提问于 2014-02-28 08:11:53
回答 4查看 110关注 0票数 2

我有一个MySQL数据库,其中有一个列,其中包含一些我想搜索的文本。

让我们假设数据库中的一些文本语句是

  1. 你好,我叫XXX2,住在YYY
  2. 我的名字也写成XXX-2,我住在YYY。
  3. 有时写成XXX 2,我住在YYYZZZ

现在让我们说,我想通过PHP脚本搜索MySQL数据库中包含"XXX2“或"YYY”的语句。

使用MySQL搜索只会返回语句1)。我想把这三句话都还回去。

我正在考虑的一件事是在PHP中生成搜索字符串的所有排列,然后依次查询MYSQL数据库。这是最好的方法吗?Php中是否有现成的函数来生成这样的组合?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-02-28 08:35:47

如果您知道在单词-部件之间需要哪些字符,则可以使用正则表达式查询数据库。对于你的例子来说,这是可行的:

查找XYZ2的变体:

代码语言:javascript
复制
 SELECT       \*     FROM `xytest`     WHERE val RLIKE 'XXX[- ]?2';

查找YYYZZZ的变体:

代码语言:javascript
复制
SELECT
  *
FROM `xytest`
WHERE val RLIKE 'YYY[- ]?ZZZ';

这使用MySQL正则表达式匹配允许可选的-或word部件之间。

如果在中间有更多的字符,您可以将[- ]改为[- _] (也可以识别_)或[^a-z0-9] (每个非字母的非数字)。大括号后面的?使它的存在是可选的。

遗憾的是,MySQL无法告诉您匹配的是什么,但是如果您需要知道,可以将相同的正则表达式提供给PHP的正则表达式引擎之一。

查找XXX2或YYYZZZ:

代码语言:javascript
复制
SELECT
  *
FROM `xytest`
WHERE val RLIKE 'XXX[- ]?2|YYY[- ]?ZZZ';

当然也可以

代码语言:javascript
复制
SELECT
  *
FROM `xytest`
WHERE val RLIKE 'XXX[- ]?2' OR val RLIKE 'YYY[- ]?ZZZ';
票数 0
EN

Stack Overflow用户

发布于 2014-02-28 08:17:35

可能使用类似的操作符

代码语言:javascript
复制
SELECT 
    * 
FROM 
    mytable
WHERE 
    mycol 
LIKE 
    '%XXX%YYY%ZZZ%'
票数 0
EN

Stack Overflow用户

发布于 2014-02-28 08:18:53

如果您想使用一个字符变体进行搜索,请尝试如下:

代码语言:javascript
复制
SELECT 
    * 
FROM 
    mytable
WHERE 
    mycol 
LIKE 
    'XXX_YYY_ZZZ'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22089649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档