正则表达式快速使用入门

昨天临时接到一个需求,要将所有.sql和.tcl里面的表名全部截取出来,并输出excel。 

首先做的分析,就是sql文件里面,表名都存在什么结构下。最终定义 from 后和join 后。 但是,还存在子查询和结果子集的情况。 

就是说,有可能from 和join后面跟的是一个(select * from...)的结构。

考虑了下,用逻辑去匹配并输出可能比较麻烦。 于是,技术选择了正则 。 但是又好久不用了,基本都还给书本了。就在网上狂找资料... 

在历经了七七四十九分钟后,终于把正则熬出来了。

string regexText = "((\\bfrom\\b)|(\\bjoin\\b))(\\s+\\w+\\.?\\w+)\\s+\\b";

之前有几个变种版本,有一个是这个最终版的2倍多的长度.... 不过那个也基本可以实现需求。这里就不晒了。

背景介绍完了,下面切入正题:

目标字符串  string text="begin this is C# hello world this is JAVA hello world this is PYTHON hello world this is C++ hello world this is PHP hello world  this is over!"

需求,匹配所有编程语言:

string regText = "\\bis\\b\\s+\\w+\\W*\\s+\\bhello\\b";

Regex reg = new Regex(regText);
            MatchCollection matchList = reg.Matches(text, 0);
            foreach (Match match in matchList)
            {
                Console.WriteLine(match.Value.Replace("is","").Replace("hello","").Trim());
            }
            Console.Read();

下面对这小段代码进行一个讲解:

首先解析下regText,\\bis\\b的意思是匹配is这个单次,当然这里面is可以替换为非符号、空格、换行的任意字母,都会作为一个固定单次来处理。  如果匹配符号,就是\\B?\\B,相当于把小b给大写了。 这个窍门可以广泛运用,比如\\w  \\W   \\d  \\D  \\s   \\S 。 相当于都是反义。 所以只需要记住常用的小写代表什么就可以了。

\\s 的意思是代表 空格, 后面跟+代表1~n个空格,跟*代表0~n个空格,跟?代表0~1个空格。 也可以跟{2}代表匹配2个空格,或者跟{1,3}代表匹配1~3个空格

好了,这样就可以看出regText的意思了吧, 找到text字符串中所有在is+一到多个空格+一到多个字符+零到多个符号+一到多个空格后面+hello。 这样就可以根据Is 开头, hello结尾的特性将需要的数据提出来了。 

由于时间关系,就写这么多吧。 最后送大家两个网址,如果你想系统学习下,可以看一下。

http://www.wangqi.com/n9250c53.aspx   这里面可以找到正则里面的所有语法。

http://www.cnblogs.com/deerchao/archive/2006/08/24/zhengzhe30fengzhongjiaocheng.html      这个楼主很赞,对正则各个语法的分析很到位。楼猪一些不懂的也是从这里看到的~   

有兴趣的可以分析下

string regexText = "((\\bfrom\\b)|(\\bjoin\\b))(\\s+\\w+\\.?\\w+)\\s+\\b";  这个正则式子,如果能写出类似的,那么基本上正则高中毕业了。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值