在MySQL

时间:2016-01-27 13:04:32

标签: mysql regex

我尝试使用以下方法选择MySQL中仅包含英语和特​​殊字符的所有行:

SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9 \-\:\(\)\&\.\,\?]+$'

当我尝试添加- : ( ) & . , ? ! ' | < >时,我不知道出了什么问题。

3 个答案:

答案 0 :(得分:1)

正如有些人已经评论过,您需要做的只是在[ ]之间的正则表达式中添加其他字符。

其中一些需要在其前面使用\进行转义(就像-已经成为\-一样。

要充分了解它:逐个添加它们。

参考:http://dev.mysql.com/doc/refman/5.5/en/regexp.html

答案 1 :(得分:1)

  

我想要的特殊字符:- : ( ) & . , ? ! ' | < >

请注意,当您向字符类添加字符时,您不必盲目地转义所有字符,如果必须转义它们,则必须在MySQL正则表达式中使用双\\反斜杠。但是,没有必要。将-连字符放在字符类的开头或结尾时,或者在POSIX字符类之后,将其视为文字连字符。其他&#34;特别&#34;您需要的字符不必在字符类中进行转义。

此外,'应在单引号字符串文字中加倍。

所以,使用

SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9 :()&.,?!''|<>-]+$'

答案 2 :(得分:0)

您可以使用not regexp

select *
from table
where column not regexp '[^A-Za-z0-9:()&.,?!''|<>]';

也就是说,返回column的字符不在列表中的行。