正则表达式-子表达式(四)
来源:互联网 发布:面朝大海春暖花开 知乎 编辑:程序博客网 时间:2024/05/17 02:04
从这一节开始,开始涉及到正则表达式的一些高级用法,前面只是一些基础知识是基本块,构成了接下来的这些高级的使用方法。简单来讲,子表达式就是使用括号包裹起来的正则表达式而已。而本章的子表达式在后面的一致性、回溯查找,前后查找,嵌入条件和替换当中都将发挥重要作用。那么现在我们来学习下这个重要子表达式概念。假设我们需要查找到正确的ip地址信息,而不是非法的。那么按照一般写法就是以下这样:
- ([\d]{1,3}\.){3}([\d]{1,3})
这其中,包含了2个括号,就是2个子表达式。([\d]{1,3}\.)和([\d]{1,3})当然,仔细来看,这个表达式是存在问题的。比如Ip地址的数字是0-255范围内,而上面这个表达式明显已经是可以匹配到255以上的数字,甚至可以匹配到999.这当然是不正确的。如果稍微改良一下应该就可以满足我们的要求。
第一步我们需要做的是,找到一个表达式可以匹配到0-255,这个看上去并不难,稍作思考得出如下正则表达式。思路是1位、2位、或者3位ip地址:
- (((1[\d]{2})|([\d])|([1-9][\d])|(25[0-5])|(2[0-4][\d]))\.){3}
最后一个数字是0-255,不需要匹配. ,所以最终的表达式是这样的
(((1[\d]{2})|([\d])|([1-9][\d])|(25[0-5])|(2[0-4][\d]))\\.){3}(((1[\d]{2})|([1-9][\d])|([\d])|(25[0-5])|(2[0-4][\d])))
可能有些人看上去会觉得很长,其实就是各个子表达式,各个表达式关系理清楚就好了。 文章的最后,我分享一个小技巧吧。很多人会编写SQL语句,如果遇到 那种字段比较多的数据库表,编写UPDATE 参数语句,估计也是很崩溃的事情,这里介绍一个使用子表达式的一个小技巧
假设数据库表TableA有从a-g字段,既
select a,b,c,d,e,f,g from TableA,那么怎么快速变成Update的参数语句呢?
最终我们想要的结果是这样的:
update tablea set a=@a,b=@b,c=@c,d=@d,e=@e,f=@f,g=@g where id =@id
在notepad++ 将字段复制进去,既a,b,c,d,e,f,g然后使用正则表达式,在find文本框中输入(\w+) 然后在replace文本框中输入\1=\@\1,然后全部替换,最后就得到了:
a=@a,b=@b,c=@c,d=@d,e=@e,f=@f,g=@g
再加上update where等语句,就可以很快速的完整。这里稍微解释一下,替换文本中\1用来代替第一个子表达式(当然有多个可以用\2\3等),相当于占位符,\1 =(\w+),所以最终就替换成了我们想要的样子。
0 0
- 正则表达式-子表达式(四)
- 正则表达式(四)
- Python正则表达式(四)
- 学习正则表达式(四)
- 正则表达式(四)------ 断言
- 正则表达式规则(四)
- 正则表达式 优先级(四)
- ES6(四) 正则表达式
- 正则表达式-爬虫(四)
- 正则表达式总结(四)
- 正则表达式 引用子表达式
- C#正则表达式编程(四):正则表达式
- C#正则表达式编程(四):正则表达式
- 正则表达式(四):正则表达式的与或非
- 正则表达式使用指南四
- 正则表达式学习四
- Java正则表达式(四)
- 正则表达式四
- 使用Octave音频处理(二):基本数学信号处理
- Python实战计划学习作业1-4
- redis如何分配哈希槽
- 5个Linux 服务器发行版你值得拥有
- 数组相关
- 正则表达式-子表达式(四)
- 安卓Andriod使用入门(十四)【滑动布局】
- Activity的生命周期之onPause、onStop
- scrapy 初体验
- Template 模块模式
- 20161116
- 安装完ubuntu双系统进不了windows
- 关于取消高亮的方法
- muduo限制服务器的最大并发数