如何用正则表达式检测含内部单引号的MySQL查询语句
匹配MySQL查询中含未转义内部单引号的语句的正则表达式
适用场景
识别MySQL查询语句里,被单引号包裹的字符串内部存在未转义单引号的语法错误语句(MySQL中字符串内部的单引号需用两个单引号转义,比如'lorem''s ipsum'才是合法写法)。
正则表达式
^.*'[^']*(?<!')'(?!')[^']*'.*;$
正则说明
^.*:匹配语句开头到错误片段前的任意字符'[^']*:匹配一个单引号开头,后跟任意数量非单引号字符(?<!')'(?!'):精准匹配单个未转义的单引号——确保该单引号前后都不是单引号,排除MySQL合法的转义写法''[^']*':匹配从错误单引号到下一个闭合单引号之间的任意非单引号字符.*;$:匹配剩余字符直到语句结尾的分号
示例验证
针对给出的两条SQL语句:
UPDATE
blogSETBlogDesc= 'dummy texts' ,BlogHeadlinePic= 'images12.png' whereBlogId= 'abcdef';
updateblogsetBlogDesc= 'lorem's ipsum' ,BlogHeadlinePic= 'images.png' whereBlogId= 'abc'; #need to detect this query
第二条含错误单引号的语句会被上述正则匹配,第一条合法语句不会被匹配。
内容的提问来源于stack exchange,提问作者Nikolius Lau
相关产品推荐
相关产品推荐

