我尝试使用以下方法选择MySQL中仅包含英语和特殊字符的所有行:
SELECT * FROM table WHERE column REGEXP '^[A-Za-z0-9 \-\:\(\)\&\.\,\?]+$'
当我尝试添加- : ( ) & . , ? ! ' | < >
时,我不知道出了什么问题。
答案 0 :(得分:1)
正如有些人已经评论过,您需要做的只是在[
]
之间的正则表达式中添加其他字符。
其中一些需要在其前面使用\进行转义(就像-
已经成为\-
一样。
要充分了解它:逐个添加它们。
答案 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
的字符不在列表中的行。