包含'@'的字边界的MySQL正则表达式

时间:2016-07-27 08:14:19

标签: mysql sql regex

我正在尝试使用正则表达式搜索示例短语:'@test123'

SELECT (...) WHERE x RLIKE '[[:<:]]@test123[[:>:]]'

没有运气。字边界选择器'[[:<:]]'可能不会将“@”统计为单词。

如何实现呢?如何在MySQL正则表达式边界选择器中设置但有例外?

2 个答案:

答案 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。)

[..]