我正试图从我的表中删除不以alnum字符开头的记录。我尝试了很多不同的东西,但MySQL似乎没有玩过球。
我目前的查询是:
SELECT *
FROM central_store
WHERE DomainName NOT REGEXP '^[[a-z|0-9]]'
我也尝试了:alnum
选项,但我的结果仍会返回以0-9开头的记录。我知道这可能是基本的,但请有人解释我做错了什么。
答案 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”,我怀疑你对此不感兴趣。)