Mysql正则表达式并不是以alnum开头的

时间:2018-02-02 12:35:58

标签: mysql regex

我正试图从我的表中删除不以alnum字符开头的记录。我尝试了很多不同的东西,但MySQL似乎没有玩过球。

我目前的查询是:

SELECT *
FROM central_store
WHERE DomainName NOT REGEXP '^[[a-z|0-9]]'

我也尝试了:alnum选项,但我的结果仍会返回以0-9开头的记录。我知道这可能是基本的,但请有人解释我做错了什么。

2 个答案:

答案 0 :(得分:0)

由于括号加倍,您的图案不起作用。 ^[[a-z|0-9]]匹配字符串(^)位置的开头,然后[[a-z|0-9]匹配[,或ASCII字母,|或ASCII数字,然后是]。因此,它在字符串的开头匹配a]

您可以使用

修复您的模式
REGEXP '^[^a-z0-9]'

或者,使用^[^[:alnum:]],因为必须在括号表达式中使用POSIX字符类(如[:alnum:]):

REGEXP '^[^[:alnum:]]'

如果您有默认设置,'^[a-z0-9]'模式也将匹配大写ASCII字母,因为默认情况下,MySQL正则表达式搜索不区分大小写。

请注意'^[^a-z0-9]'匹配

  • ^ - 字符串的开头
  • [^a-z0-9] - 除ASCII字母或数字以外的任何字符([^[:alnum:]]都相同,匹配字母或数字以外的任何字符)。

答案 1 :(得分:0)

“alnum”表示“字母或数字”。但是你说你不想从一个数字开始。这是什么?

WHERE url RLIKE '^[[:alpha:]]'

说“以一个字母开头,不是一个数字,不是标点符号。

要查找“不以字母开头”的行:

WHERE url NOT RLIKE '^[[:alpha:]]'

如果您需要“以字母开头”和“继续使用alnum”:

WHERE url RLIKE '^[[:alpha:]][[:alnum:]]*$'

添加NOT以反转它。

(因为你说“url”,我怀疑你对此不感兴趣。)