我尝试在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
如何转义星号(*
)以便与字符*
完全匹配?
答案 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的回答集中在为什么\\\\*
不正确。