我正在尝试使用正则表达式搜索示例短语:'@test123'
:
SELECT (...) WHERE x RLIKE '[[:<:]]@test123[[:>:]]'
没有运气。字边界选择器'[[:<:]]'
可能不会将“@”统计为单词。
如何实现呢?如何在MySQL正则表达式边界选择器中设置但有例外?
答案 0 :(得分:1)
MySQL 5.7 Reference Manual / ... / Regular Expressions:
[[:&lt;:]],[[:&gt;:]]
这些标记代表字边界。他们匹配开头和 词尾,分别。一个单词是一系列单词字符 不在单词字符之前或之后的单词字符。一个字 character是alnum类中的字母数字字符或 下划线(_)。
因此,@
是单词边界,而不是单词字符。我们需要扩展&#34;字符&#34;类也包含@
。最简单的方法是直接枚举自定义单词字符a-z0-9_@
:
SELECT * FROM
(
SELECT '@test123' AS x UNION ALL
SELECT 'and @test123 too' UNION ALL
SELECT 'not@test123not' UNION ALL
SELECT 'not@test123' UNION ALL
SELECT '@test123not' UNION ALL
SELECT 'not @ test123' UNION ALL
SELECT 'test123' UNION ALL
SELECT '@west123'
) t
WHERE x RLIKE '([^a-z0-9_@]|^)@test123([^a-z0-9_@]|$)';
结果:
x
----------------
@test123
and @test123 too
答案 1 :(得分:1)
我认为您可以使用以下表达式:
'[.@.][[:<:]]test123[[:>:]]'
注意:请勿在{{1}}中使用非单词文字,并使用
[[:<:]][[:>:]]
作为字符。
或(感谢@ Y.B。)
[..]