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