首页 > 解决方案 > MySQL 8 + 正则表达式词边界

问题描述

我想在单词的开头或结尾搜索术语“ed”,以下 SQL 语句仅匹配完全匹配的单词。

SELECT * FROM ul_product
where productname REGEXP '\\bed\\b'

如果我执行以下操作,则会得到 ed 位于单词开头或结尾的结果

SELECT * FROM ul_product
where productname REGEXP '(\\bed)|(ed\\b)'

这是它应该如何工作的吗?

在线单词边界和示例的描述使我相信语句 1 会产生语句 2 的结果。

我可以按原样使用我创建的语句来进行“精确”和“部分”匹配,但这对吗?

标签: mysqlsqlregexwhere-clauseword-boundary

解决方案


Regex'\\bed\\b'搜索被单词边界'ed' 包围- 换句话说,它搜索word 'ed'

另一方面,正则表达式:'(\\bed)|(ed\\b)'搜索'\\bed''ed\\b'(管道字符代表正则表达式中的“或”)。所以它'ed'在单词的开头单词的结尾匹配 - 这似乎是你想要的。

请注意,这里不需要括号。你可以这样写:

where productname REGEXP '\\bed|ed\\b'

推荐阅读