【问题标题】:MySQL and word boundary in regex正则表达式中的 MySQL 和单词边界
【发布时间】:2012-05-31 03:38:55
【问题描述】:

如何在 MySQL 查询中使用正则表达式词边界?

例如,我想匹配“产品”或“时事通讯”,

OR 可以正常工作,

IF(? = 'product' OR ? = 'newsletter', ... , ...)

但是正则表达式呢?我想它会是这样的吗?

IF(? REGEXP '^('product'||'newsletter')+$', ..., ... ) 

【问题讨论】:

  • ... IN ('product', 'newsletter') 呢?

标签: mysql sql regex


【解决方案1】:
SELECT *
FROM tbl
WHERE description REGEXP '[[:<:]]red[[:>:]]|[[:<:]]blue[[:>:]]'

或者,作为选择表达式:

SELECT IF(description REGEXP '[[:<:]]red[[:>:]]|[[:<:]]blue[[:>:]]', 1, 0) AS is_matched, tbl.*
FROM description

您可以使用RLIKE 作为同义词,但REGEXP 似乎更受欢迎[需要引用]

区分大小写

来自MySQL manual for REGEXP

REGEXP 不区分大小写,除非与二进制字符串一起使用。

mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
        -> 1  0

【讨论】:

    【解决方案2】:

    使用REGEXPRLIKE

    Regular expressions in MySQL

    在您的情况下,您可以将 MATCH() ... AGAINST 全文搜索与 MyISAM 存储引擎一起使用。

    或者你可以使用@Wiseguy 提到的IN()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-07
      • 1970-01-01
      • 2021-06-09
      • 2018-07-09
      • 1970-01-01
      • 2011-04-14
      相关资源
      最近更新 更多