我尝试在 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)
如何转义星号( *)以精确匹配字符*?
\\*是匹配星号的正确方法。但[[:>:]]后面不会匹配,因为它只在单词字符和非单词字符之间匹配,而*不是单词字符。相反,您需要显式匹配非单词字符。您还需要替代行尾,因为这是另一种类型的字边界。
> 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)
| 归档时间: |
|
| 查看次数: |
9948 次 |
| 最近记录: |