'''
 Created on 2019年12月2日@author: 安阳师范学院某菜鸡
 '''
'''行定位符'''
'''
  行定位符就是用来描述字符串的边界.'^'表示行的开始,'$'表示行的结尾
  假设给定字符串为"abccba"
  那么^ab就可以匹配到,因为他表示匹配以ab开头的字符串,^ba就不可以了,ba$可以,因为ba在行尾
  如果要求匹配的字符串在任意位置,如cc,那么直接用cc匹配就可以
 '''
'''元字符'''
'''
 \ba\w*\b
 \b 表示从某个单词开始处 如\表示从某个单词开始,匹配字母a(\ba)
 接着是任意数量的字母或数字(\w*),最后是单词结束处(\b)
 上述表达式可以匹配"asoft" "abook" "al123456"等
 '''
 '''
 .                    匹配除换行符以外的任何字符
 \w        匹配子母数字下划线或汉子
 \s        匹配任意的空格符
 \d        匹配数字
 \b        匹配单词的开始或结束
 ^                     匹配字符串开始
 $                    匹配字符串结束
 '''
'''限定符'''
'''
 ?        匹配前面的字符零次或一次        colou?r该表达式可以匹配colour和color
 +        匹配前面的字符一次或多次        go+gle    可以匹配gogle gooooo...gle
 *        匹配前面的字符零次或多次        go*gle        匹配ggle goooooo...gle
 {n}    匹配前面的字符n次            go{2}gle            google
 {n,}    匹配前面的字符至少n次    go{1}gle            gogle    gooo...gle
 {n,m}    匹配至少n次,至多m次
 '''
'''字符类'''
'''
 匹配指定字母    [aeiou]     如:c[aeiou]lor    可以匹配calor celor ... culor
 同理指定标点[!?~]
 某一范围[0-9]    完全等同于\d
 [a-z0-9A-Z]完全等同\w
 '''
'''排除字符'''
'''
 ^表示匹配不符合中括号内的任意字符
 如:[^a-zA-Z]表示匹配不是字母的任意字符
 当然,如果不在中括号内表示匹配行的开始
 '''
'''选择字符|'''
'''
 ^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$ 表示要么是满足|前面的要么满足|后面的
 仔细观察该示例,他表示的其实是身份证的匹配
 身份证有只有15位的纯数字的
 也有18位的,如果是18位的,可能钱17位是数字,最后一个是x或X,也可能18位都是数字
 仔细观察,发现,由|分割开的不同表达式需要加小括号,并且最开头的表达式与结尾的表达式不需要加括号
 从行首开始到行末结束一定要加上^或$
 '''
'''转义字符\''''
'''
 正则表达式中的转义字符与python,java,c,c++等诸多语言中的转义字符大同小异
 如:
 如需匹配ip地址,如果像下面这样
 [1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{0,3}
 他甚至会匹配111011101110111
 因为前文已经介绍过.可以匹配除了换行符以外的任意字符
 这时就需要加上转义字符了
 正确的写法是:
 [1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{0,3}
 '''
'''分组()'''
'''
 通过身份证的例子,大家应该对小括号已经有所了解,没错,()就是用来限定作用范围的,如:
 (thir|four)th 就是匹配thirth或fourth
 thir|fourth 就是匹配thir或fourth
 '''
'''
Created on 2019年12月2日

@author: 安阳师范学院某菜鸡
'''
'''行定位符'''
'''
 行定位符就是用来描述字符串的边界.'^'表示行的开始,'$'表示行的结尾
 假设给定字符串为"abccba"
 那么^ab就可以匹配到,因为他表示匹配以ab开头的字符串,^ba就不可以了,ba$可以,因为ba在行尾
 如果要求匹配的字符串在任意位置,如cc,那么直接用cc匹配就可以
'''
'''元字符'''
'''
\ba\w*\b
\b 表示从某个单词开始处 如\表示从某个单词开始,匹配字母a(\ba)
接着是任意数量的字母或数字(\w*),最后是单词结束处(\b)
上述表达式可以匹配"asoft" "abook" "al123456"等
'''
'''
.                    匹配除换行符以外的任何字符
\w        匹配子母数字下划线或汉子
\s        匹配任意的空格符
\d        匹配数字
\b        匹配单词的开始或结束
^                     匹配字符串开始
$                    匹配字符串结束
'''
'''限定符'''
'''
?        匹配前面的字符零次或一次        colou?r该表达式可以匹配colour和color
+        匹配前面的字符一次或多次        go+gle    可以匹配gogle gooooo...gle
*        匹配前面的字符零次或多次        go*gle        匹配ggle goooooo...gle
{n}    匹配前面的字符n次            go{2}gle            google
{n,}    匹配前面的字符至少n次    go{1}gle            gogle    gooo...gle
{n,m}    匹配至少n次,至多m次
'''
'''字符类'''
'''
匹配指定字母    [aeiou]     如:c[aeiou]lor    可以匹配calor celor ... culor
同理指定标点[!?~]
某一范围[0-9]    完全等同于\d
[a-z0-9A-Z]完全等同\w
'''
'''排除字符'''
'''
^表示匹配不符合中括号内的任意字符
如:[^a-zA-Z]表示匹配不是字母的任意字符
当然,如果不在中括号内表示匹配行的开始
'''
'''选择字符|'''
'''
^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$ 表示要么是满足|前面的要么满足|后面的
仔细观察该示例,他表示的其实是身份证的匹配
身份证有只有15位的纯数字的
也有18位的,如果是18位的,可能钱17位是数字,最后一个是x或X,也可能18位都是数字
仔细观察,发现,由|分割开的不同表达式需要加小括号,并且最开头的表达式与结尾的表达式不需要加括号
从行首开始到行末结束一定要加上^或$
'''
'''转义字符\''''
'''
正则表达式中的转义字符与python,java,c,c++等诸多语言中的转义字符大同小异
如:
如需匹配ip地址,如果像下面这样
[1-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{0,3}
他甚至会匹配111011101110111
因为前文已经介绍过.可以匹配除了换行符以外的任意字符
这时就需要加上转义字符了
正确的写法是:
[1-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{0,3}
'''
'''分组()'''
'''
通过身份证的例子,大家应该对小括号已经有所了解,没错,()就是用来限定作用范围的,如:
(thir|four)th 就是匹配thirth或fourth
thir|fourth 就是匹配thir或fourth
'''