羽中飞人 2023-08-02 17:18 采纳率: 48.1%
浏览 23
已结题

关于MYSQL正则匹配不准确的问题

经过数次测试,可以确定如下问题:
1、同样的正则表达式'^[a-zA-Z][a-zA-Z\d_-]{{5,19}}$',用python的re函数,能够有效匹配出大小写字母开头的字符串,但MYSQL不能分辨大小写字母
2、把正则表达试换成'^[0-9][a-zA-Z\d_-]{{5,19}}$',MYSQL能匹配出数字开头的字符串
3、SQL语言前面的r和f,都去掉过,或者只保留其中一个,也没用
真的百思不得其解!

a = '5z-9ChenSiJie'
b = re.subn(r'^[a-zA-Z][a-zA-Z\d_\-]{5,19}$', '', a)
print(b)
sql1 = rf"""select * from wx_visit_records where REGEXP_LIKE(message,'^[a-zA-Z][a-zA-Z\d_\-]{{5,19}}$')"""
res, header = g.execute_sql(sql1, None)
print(res)
df = pd.DataFrame(res, columns=header)
print(df)
  • 写回答

12条回答 默认 最新

  • Watch the clown 2023-08-02 17:27
    关注

    mysql里不需要r和f前缀,用这个命令

    SELECT * FROM wx_visit_records WHERE REGEXP_LIKE(message, BINARY '^[a-zA-Z][a-zA-Z\d_\-]{5,19}$')
    PS:我觉得mysql里有个posix可以区分大小写的,但是没有数据集供我测试,你或许可以尝试这样
    SELECT * FROM wx_visit_records WHERE message REGEXP '^[[:alpha:]][[:alnum:]_-]{5,19}$'
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(11条)

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 创建了问题 8月2日