【问题标题】:MySQL 8 + Regex Word BoundariesMySQL 8 + 正则表达式词边界
【发布时间】:2020-06-28 08:47:32
【问题描述】:

我想在单词的开头或结尾搜索词 'ed',下面的 SQL 语句只匹配一个精确的单词匹配。

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

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

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

这就是它应该的工作方式吗?

网上对单词边界的描述和例子让我相信语句1会产生语句2的结果。

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

【问题讨论】:

    标签: mysql sql regex where-clause word-boundary


    【解决方案1】:

    Regex '\\bed\\b' 按字边界搜索'ed' 环绕 - 换句话说,它搜索 'ed'

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

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

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

    【讨论】:

    • 谢谢,所以我所做的似乎是有效的。我以为我为了得到我想要的结果而错误地实现了它。
    • @DanielCook:是的,你的(第二个)解决方案没问题。
    猜你喜欢
    • 2011-04-14
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    相关资源
    最近更新 更多