正则表达式基础(更新中。。。)
问题1:我是怎么接触到并开始学习正则表达式?答:
开始学习时的热身:1.正则式和通配符(如*和?)的区别。 前面我们知道了*和?在通配符中的用途,而在正则式中它们的意义则完全不同。
真正意义上的开始:
过多的细节我就不说了,这里我基本把它作为一个正则式各种繁杂元字符的汇总备忘。 要理解正则式,其实我本人认为只要理解一点就算入门了,就是: “正则式就是用来匹配符合某种格式的字符串的,而正则式的各种元字符就代表了各种匹配条件,比如:d 就是在说‘这里是一个数字’,d* 就是在说‘这里是任意数目的数字,可能是任意多个,也可能是一个都没有’”, 不知道我这样的理解是不是属于狭隘,反正我自己是这么理解的,也不管砖家是怎么说了。 我会按我自己的理解重组各种元字符,而不是像其他介绍中的那么介绍,那样的话,我觉得有点别扭。 各种元字符:
单个匹配: d 匹配一个数字w 匹配一个单词,计算机所能理解的单词是指:字母或数字或下划线或汉字等 s 匹配一个空白,包括空格,制表符,换页符等 . 匹配一个除了换行符之后的任意一个字符
指定特定的位置: ^ 代表开头, 如:^a 匹配以a开头的字符串$ 代表结尾,如:a$ 匹配以a结尾的字符串 b 单词的开头与结尾 如:babcb 匹配abc,这样就不会匹配到abcd了 (它可以匹配围绕在单词周围的标点符号)
指定范围: [.?!] 匹配?.! 中的其中一个[a-z] 所有的小写字母里 [f-k] 字母‘f’到‘k’之间的字符 [a-zA-Z0-9] 所有的大小写字母和数字 [^abc] 不匹配abc中的一个
各种量词,用来控制次数:
? 匹配0次或者1次,相当于{0,1}
+ 匹配多于1次,即一定到匹配一次前面的字符。
* 匹配任意多个或者不匹配。
b.指定一个重复的范围: {n} 重复n次 {m,n} 重复次数为 m到n 之间的数字,含m与n
分支条件: | 意思:或 例子:(Tom|Jack) 匹配Tom或者Jack中的一个转义字符(取消特殊含义,或者赋予): t n r (分别的含义:制表符,换行符,回车) ^ . *
分组: () 用小括号包含表达式叫分组,所以单独使用(时,需要转义,写成:(。括号中的内容会记录在反向引用1 2 等中
修饰符: i 匹配时不区分大小写g 全局匹配 s 忽略空白
匹配某一个位置:
几个规律: 1. 一般在正则式中,大写字母是作为反义存在的,如:s代表匹配一个空白,而S代表着非空D 匹配任意非数字的字符 2. 贪婪模式,和非贪婪模式(勉强模式)
说了这么多,还是上几个实例,大家对照前面的知识点来理解哈。bhib.*bLucyb .*表示匹配任意数量的不包含换行的字符,bhib bLucyb 意思是单单匹配hi和Lucy,而不匹配类似high或者Lucyman之类的。这条语句会匹配类似,hi,nice to meet you,Lucy. 0d{2}-d{8} 会匹配符合中国的电话号码格式的数字,如100-35838475(?0d{2}[)-]?d{8}) 匹配多个格式的电话号码,像(010)88886666,或022-22334455,或02912345678,这里的()需要转义 ^d{5,12}$ 匹配QQ的格式,5到12个数字,比如我的QQ:871892708((2[0-4]d|25[0-5]|[01]?dd?).){3}(2[0-4]d|25[0-5]|[01]?dd?) 匹配IP地址的正则表达式 还有几个高级技巧,以后再补充。如果应付不太繁重的正则式工作,上面的就够用了。
正则式的基本规则就是以上了,重点是自己会不会灵活运用。我们要根据我们所有匹配的字符串的特点来写相应的正则表达式。 幕后:推荐书籍:《精通正则表达式》
a.某网站,http://7chan.org/gif/,上面有很多很“动感”的GIF图片,我想一次性全部都下载下来然后慢慢筛选,要是一次次右键另存为···,那我估计我迟早得疯掉。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |