REGEX无法在mysql中运行

时间:2011-07-29 04:53:13

标签: mysql regex

我正在尝试查找名称中包含非字母数字字符的记录。

我以为我可以用REGEXP

来做

http://dev.mysql.com/doc/refman/5.1/en/regexp.html

然后我提到了另一个问题

How can I find non-ASCII characters in MySQL?

我发现我可以使用此查询:

SELECT * FROM tableName WHERE NOT columnToCheck REGEXP '[A-Za-z0-9]';

但它返回零行。如果我将命令替换为:

SELECT * FROM tableName WHERE columnToCheck REGEXP '[A-Za-z0-9]';

它返回了我所有的行!!。

我尝试了一些基本命令:

SELECT 'justffalnums' REGEXP '[[:alnum:]]'; returns 1

这是正确的但是

SELECT 'justff?alnums ' REGEXP '[[:alnum:]]'; also returns 1

我不明白为什么要回复一个。它应该返回0,因为它有空格,也是'?'

在mysql中是否有任何启用正则表达式的工作?

我正在使用mysql 5.0并尝试使用5.1。

2 个答案:

答案 0 :(得分:3)

您需要添加^(字符串开头)和$(字符串结尾)以及一个说明要使用的特定数量的字母数的运算符。下面我使用了+,这意味着一个或多个。

SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+$';
-- only contains alphanumns => 0

SELECT 'justff?alnums ' REGEXP '^[[:alnum:]]+';
-- just begins with alphanum => 1

SELECT 'justff?alnums ' REGEXP '[[:alnum:]]+$';
-- just ends with alphanum => 0

答案 1 :(得分:0)

您提供的正则表达式并未说明整个字段必须包含相关字符。您可以在字符集的开头使用否定字符^

SELECT 'justff?alnums' REGEXP '[^A-Za-z0-9]'; returns 1
SELECT 'justffalnums' REGEXP '[^A-Za-z0-9]'; returns 0