本文主要参考http://www.jb51.net/tools/zhengze.html
正则表达式是用来描述文本内容或者字符串是否符合某种规则的方法。
例如希望判断一行数字是否是一个有效的电话号码,或者判断用户输入的内容是否是一个有效的邮箱地址等。
微软正则表达式的规范如下链接所示:
http://msdn.microsoft.com/zh-cn/library/az24scfc.aspx
下面内容为学习正则表达式的记录,是一些入门的比较基础的东西,并实现一些小的测试。(面试中曾遇到过用Python编写正则表达式,判断电话号码是否合法)
首先需要了解 \b 它是正则表达式中的一个比较特殊的代码,一般用她来匹配一个位置,该位置的前一个或者后一个字符不全是字母或数字(可以用\w表示)
例如,匹配‘hi’,使用\bhi\b,则会匹配him,thi,hill等单词中的hi
常用的元字符如下所示:
常用的限定符如下所示:
想要匹配没有预定义元字符的字符集,可以使用[]中括号,例如想要匹配奇数,可以使用[13579],也可以指定一个范围[a-z]用来匹配小写字母
分支匹配,类似于或操作符|,用来匹配不同的正则规则,如果第一个不匹配,查看第二个。比如th|e|is|at,可以用来匹配the,that,this
如果想要匹配重复的内容,可以使用分组来限定要匹配的的内容,然后在分组后限定要重复的次数。分组使用小括号标示()。例如一个正确的IP地址匹配表达式如下:
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)
分组构造主要用于捕获输入字符串的子字符串。详细解释见微软的MSDN链接:
http://msdn.microsoft.com/zh-cn/library/bs2twtah.aspx
常用的分组语法如下所示:
(exp)的例子,用来捕获以空格分开的两个相同的单词:(\w+)\s(\1)。通过使用语法”\数字”来匹配前面的分组(\w+),用在同一个正则表达式中
(?<name>exp)的例子,用来捕获以空格分开的两个相同的单词(\k用来后向匹配分组):(?<name1>\w+)\s\k<name1>
(?:exp)只匹配,并不捕获文本内容
(?=exp)的例子,用来捕获以标点符号结尾的单词:\w+(?=\.)。例如“this is a test.”中的test
(?<=exp)的例子,用来捕获以19开头后面跟两个数字的单词:(?<=19)\d{2}\b,如“1986”中的86
(?!exp)的例子,用来捕获不是以un开头的单词:\b(?!un)\w+\b,如“university Beijing”中的Beijing
(?<!exp)的例子,用来捕获不是以19开头后面跟两个数字的单词:(?<!19)\d{2}\b,如“1870 1900”中的70
常用的反义字符如下所示:
正则表达式中的注释以#开始
关于平衡组的定义和解释未添加,待续。。。。