如何在REGEXP中转义MySQL中的星号(*)

时间:2016-07-01 03:05:57

标签: mysql regex

我尝试在MySQL中使用REGEXP匹配关键字,如下所示:

-- Match "fitt*", the asterisk "*" is expected to be matched as-is

> select 'aaaa fitt* bbb' regexp '[[:<:]]fitt\*[[:>:]]'; -- return 1, ok
> select 'aaaa fitttttt* bbb' regexp '[[:<:]]fitt\*[[:>:]]'; -- return 1 as well, but should return 0

> select 'aaaa fitt* bbb' regexp '[[:<:]]fitt\\*[[:>:]]'; -- return 0, failed

如何转义星号(*)以便与字符*完全匹配?

2 个答案:

答案 0 :(得分:3)

\\*是匹配星号的正确方法。但是[[:>:]]之后不匹配,因为它只匹配单词字符和非单词字符,而*不是单词字符。相反,您需要明确匹配非单词字符。你还需要一个替代的行尾,因为那是另一种类型的单词边界。

> select 'aaaa fitt* bbb' regexp '[[:<:]]fitt\\*([^[:alnum:]]|$)'; -- returns 1
> select 'aaaa fitttttt* bbb' regexp '[[:<:]]fitt\\*([^[:alnum:]]|$)'; -- returns 0

明确匹配星号的另一种方法是将其放在字符类中。

> select 'aaaa fitt* bbb' regexp '[[:<:]]fitt[*]([^[:alnum:]]|$)'; -- returns 1
> select 'aaaa fitttttt* bbb' regexp '[[:<:]]fitt[*]([^[:alnum:]]|$)'; -- returns 0

答案 1 :(得分:0)

可能有3个问题:

第1项:标题问题的答案是:

startActivity

第2项:\\* (in the regexp) [*] 可能可能需要来自某个客户端,在将其提供给MySQL之前首先取消反斜杠,仍然需要反斜杠。但是,在写入时(没有任何客户端代码),\\\\*被视为零或更多反斜杠。

第3项:@ Barmar的回答集中在为什么\\\\*不正确。