3

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

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

它适用于OR,

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

但是正则表达式呢?我想它会像下面这样?

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

2 回答 2

5
SELECT *
FROM tbl
WHERE description REGEXP '[[:<:]]red[[:>:]]|[[:<:]]blue[[:>:]]'

或者,作为选择表达式:

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

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

区分大小写

来自REGEXP 的 MySQL 手册

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

mysql> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
        -> 1  0
于 2012-10-29T10:09:04.917 回答
1

使用REGEXPRLIKE

Regular expressions in MySQL

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

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

于 2012-05-31T03:41:53.363 回答