【问题标题】:regexp in mysql - find a string that holds ALL keywords (AND operator)mysql 中的正则表达式 - 查找包含所有关键字的字符串(AND 运算符)
【发布时间】:2012-05-11 23:26:36
【问题描述】:

我被困了 3 个小时,我猜这很简单,但一直在搜索互联网并没有找到答案。 我有 1、2、3、4 个或更多关键字和一个用于在其中搜索关键字的字符串。我正在寻找匹配所有关键字的正则表达式。比如:

string = "这辆车是红色的,有大轮子"

关键词:车轮

返回:真

关键词:车轮车

返回:真

关键词:汽车是红色的

返回:真

关键词:这很大

返回:真

关键词:小车是红色的

return: false(字符串中没有“小”字)

我用这样一个mysql查询:

SELECT name, desc FROM table WHERE CONCAT(name, desc) REGEXP ($keyword1)($keyword2)

但它返回空字符串。什么应该是正确的正则表达式语法?

【问题讨论】:

  • 调用语言是什么? PHP?
  • MySQL 中的正则表达式不支持反向引用,因此您需要明确说明所有可能的顺序:[[:<:]]keyword1[[:>:]].*[[:<:]]keyword2[[:>:]]|[[:<:]]keyword2[[:>:]].*[[:<:]]keyword1[[:>:]]。不漂亮。
  • @minitech:是的,我使用 php 5.3
  • eggyal: 绝对不漂亮 - 我一直在寻找没有几十个 WHERE LIKE 的更优雅的方式......我想没有“更优雅的方式”

标签: mysql regex syntax keyword


【解决方案1】:

最简单的解决方案是将AND 移出正则表达式并移入SQL:

SELECT name, desc
FROM table
WHERE CONCAT(name, desc) REGEXP ($keyword1)
  AND CONCAT(name, desc) REGEXP ($keyword2)

否则,您的正则表达式将不得不在OR 语句的长链中包含所有N! 可能的订单,并且该长度增长非常非常快(使用5 个关键字,您需要构建120 个不同的订单! )

【讨论】:

  • 但在这种情况下,我没有使用 REGEXP - 我可以使用 LIKE %keyword1 AND ...我希望我能以更优雅的方式做到这一点。无论如何,谢谢。
  • @Kalreg 当然,最好使用LIKE %keyword1%
猜你喜欢
  • 1970-01-01
  • 2021-08-14
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-30
  • 2014-03-23
相关资源
最近更新 更多