MySQL正则表达式中转义问号报错问题求助
解决MySQL正则表达式匹配以问号开头字符串的报错问题
这问题我之前踩过坑!你的报错根源是MySQL的字符串转义规则和正则表达式的转义规则冲突了:
你写的'^\?.+'里,MySQL会把字符串中的单个反斜杠\当成转义符,直接把\?解析成普通的问号?。这时候传给正则引擎的表达式就变成了^?.+——而正则里的?是量词(匹配0或1次前面的元素),放在锚定开头的^后面完全不符合语法,自然就报错了。
给你两个靠谱的解决方案:
方案1:双重转义反斜杠
把正则里的反斜杠再转义一次(用两个反斜杠),让MySQL正确识别这是正则需要的转义符:
select * from mytable where thumbnail_url regexp '^\\?.+'
这样MySQL会把\\?解析成正则引擎能识别的\?(表示字面量的问号),最终正则表达式为^\?.+,可以正确匹配以问号开头的字符串。
方案2:用字符类匹配问号
更简单直观的写法是用字符类[?]来匹配字面量的问号——字符类里的特殊字符会被当成普通字符处理,完全不用纠结转义:
select * from mytable where thumbnail_url regexp '^[?].+'
你可以测试一下:如果表中有thumbnail_url值为?abc123的行,用上面两种写法都能正确查询到这条数据。
内容的提问来源于stack exchange,提问作者Mojtaba Komeili
相关产品推荐
相关产品推荐

