我该如何在MySQL查询中使用正则表达式单词边界呢?
例如,我想匹配'product'或者'newsletter',
可以使用OR
操作符来实现,但是需要注意:
IF(? = 'product' OR ? = 'newsletter', ... , ...)
那么正则表达式呢?我猜应该像下面这样:
IF(? REGEXP '^('product'||'newsletter')+$', ..., ... )
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> SELECT 'a' REGEXP 'A', 'a' REGEXP BINARY 'A';
-> 1 0
使用 REGEXP
或 RLIKE
。
在您的情况下,您可以使用 MyISAM 存储引擎的 MATCH() ... AGAINST
全文搜索。
或者您可以像 @Wiseguy 提到的那样使用 IN()
。
... IN ('product', 'newsletter')
的意思是什么? - Wiseguy