MySQL字边界内有两个单词的括号

时间:2016-05-30 08:04:02

标签: mysql

我可以在此REGEXP字词边界[[:<:]]Burger[[:>:]]中匹配 Burger 一词。但是,我有另一个条目汉堡(奶酪),并且不能通过边界[[:<:]]Burger (Cheese)[[:>:]]这个词看到。我需要做些什么才能在单词边界上允许两个单词和括号?

1 个答案:

答案 0 :(得分:1)

当然,WHERE ... REGEXP '[[:<:]]Burger (Cheese)[[:>:]]'Burger (Cheese)不匹配。

第一个问题是你甚至没有找到括号。 ()在正则表达式中具有特殊含义,它们用于定义组,因此需要进行转义。但是,regexp(反斜杠)中的转义字符串与字符串相同 - 因为你的正则表达式在字符串中,你也需要转义反斜杠:\\(

然而,WHERE ... REGEXP '[[:<:]]Burger \\(Cheese\\)[[:>:]]'也不匹配,是什么让我们遇到第二个问题。 [[:>:]匹配字边界但parenthesis is not a word character

  

单词字符是alnum类或下划线(_)中的字母数字字符。

[[:>:]字符串不再有(Cheese)字边界,因为该字以最后e结尾。

你必须重新思考你的逻辑。如果它符合您的规范,您可以将右括号添加到表达式的末尾,例如:

mysql> SELECT *
    -> FROM (
    ->  SELECT 'Burger' AS foo
    ->  UNION ALL SELECT 'Burger (Cheese)'
    ->  UNION ALL SELECT 'Yet Another Burger'
    ->  UNION ALL SELECT 'Burger Extras'
    ->  UNION ALL SELECT 'Coffee'
    -> ) x
    -> WHERE foo REGEXP '[[:<:]]Burger \\(Cheese([[:>:]]|\\))';
+-----------------+
| foo             |
+-----------------+
| Burger (Cheese) |
+-----------------+
1 row in set (0.00 sec)