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

Zel*_*ong 4 regex mysql

我尝试在 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
Run Code Online (Sandbox Code Playgroud)

如何转义星号( *)以精确匹配字符*

Bar*_*mar 5

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

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

显式匹配星号的另一种方法是将其放入字符类中。

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