使用正则表达式匹配tsql注释语句
发布时间:2024-01-18 16:42:50
标签:正则表达式,tsql,注释
让我们来看一些例子:
--获取表的count信息
select count(*) from T with(nolock)
--获取特定值的count信息
select count(*) from T with(nolock)
where v = '--value'
--获取表'T'的count信息
select count(*) from T with(nolock)
SELECT * from T --获取表T
Where P
我们先来试着给出一个简单的匹配:
\-\-[^\r\n]*$
你会发现,它连第二条的SQL也匹配到了,这是不对的。看起来,我们应该排除"'"里面的, 我们再来改改:
\-\-[^\'\r\n]{0,}$
还是不对,这下虽然第二条的SQL没有匹配,但连第三条的都不匹配了,看起来还是不对。
那到底怎么样才能真正匹配到所有的SQL注释呢?
首先我们来总结一下SQL注释的一些特点:
1. 以--开头
2. 注释的内容,应该不会被包含在一对''之内
3. 注释应该只会在最后,前面可以可选的出现一些语句
好了,收集到了这些之后,我们最终的SQL注释的语法也出来了:
\-\-([^\'\r\n]{0,}(\'[^\'\r\n]{0,}\'){0,1}[^\'\r\n]{0,}){0,}$
这一下,四条SQL的注释全匹配到了,正则表达式太强大了吧。
这个SQL语句有一个小小问题,就是后面不能有一个单的单引号存在,否则就会匹配有问题。(因为人们的习惯对于这种分隔符默认是成双出现的,这个小问题其实也是可以忽略的)


猜你喜欢
- 本文实例讲述了CentOS7系统搭建LAMP及更新PHP版本操作。分享给大家供大家参考,具体如下:搭建LAMP环境 用yum安装安装Apac
- 1. dbm UNIX键-值数据库dbm是面向DBM数据库的一个前端,DBM数据库使用简单的字符串值作为键来访问包含字符串的记录。dbm使用
- 实例如下所示:function insertAtCursor(myField, myValue) { //IE 浏览器 if (docum
- 在以前的一篇文章自动刷新 从BrowserSync开始中,我介绍了BrowserSync这样一个出色的开发工具。通过BrowserSync我
- 1、现象a.用localhost访问,正常b.用IP地址访问,则出现403错误2、分析a.怀疑是ACL问题,设置Everyone为完全控制,
- python列表元素去重后如何保持原来的顺序不变原列表:list1 = [1,2,1,4,9,3,5,2,6,7,3,1,6,8,4,0]去
- Installing mysql (2.8.1) with native extensions /usr/local/lib/ruby/si
- 前言本文通过一个小范例来学习java中通过正则表达式如何获得一个字符串中的数字,下面话不多说,来看看详细的介绍吧。示例代码如下:import
- 数据类型是所有开发语言的基础,JavaScript虽然是一个弱类型的脚本语言,但是在数据类型上也有很多讲究的,看了淘宝UED玉伯的一篇文章,
- ./当前目录 /网站主目录 ../上层目录 ~/网站虚拟目录 如果当前的网站目录为E:\wwwroot 应用程序虚拟目录为E:\wwwroo
- 一、wordcloud库是什么?Python的wordcloud库是一个用于生成词云的Python包。它可以将一段文本中出现频率高的单词按其
- struts2.3.24 + spring4.1.6 + hibernate4.3.11+ mysql5.5.25开发环境搭建及相关说明。
- 选择排序算法步骤:找到数组中最小的那个元素中,将它和数组的第一个元素交换位置,在剩下的元素中找到最小的元素,将它和数组的第二个元素交换位置,
- 如何同时处理数据库和页面错误? If Err.Number = 0 And ob
- 目录1、梳理一下Git、github和gitee这三个之间的关系:1.1、Github1.2、Gitee 1.3、Git2、如何安
- 网站流量上来后,日志按天甚至小时存储更方便查看和管理,而Python的logging模块也提供了TimedRotatingFileHandl
- 两种方法,一种是为表空间增加数据文件: alter tablespace users add datafile '/opt/orac
- sys.argv[]是用来获取命令行参数的,sys.argv[0]表示代码本身文件路径,所以参数从1开始,以下两个例子说明:1、使用sys.
- 创建表时创建外键创建两个表格,一个名为class,create table classes(id int not null primary
- 前言以前在写C/C++代码时,可以在代码中预定义一些版本宏定义,然后再编译时从外部传入数据作为版本号。 golang代码不支持宏定义,如果每