#!/usr/bin/env python
# -*- coding: utf-8 -*-
#re模块 正规表达式

import re

#match函数和search函数
'''
re.match函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
函数语法:
re.match(pattern, string, flags=0)
函数参数说明:
参数描述:
pattern    匹配的正则表达式
string    要匹配的字符串。
flags    标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

匹配成功re.match方法返回一个匹配的对象,否则返回None。

我们可以使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。
匹配对象方法描述:
group(num=0)    匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups()    返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。
'''
'''
res1 = re.match('\d+','ddhfs33y98y392chhdf')    
res2 = re.search('\d+','dasdjkhf7fn84857fjg749') 

if res1:
    print res1.group()
else:
    print 'no'


if res2:
    print res2.group()
else:
    print 'no'
'''

'''
区别:
match从起始位置开始匹配,只从开头开始找,没有的话返回none
search整个内容里去匹配,放眼于整个字符串查找,直到找到为止,找到了就返回一个对象
'''


#findall函数
res3 = re.findall('\d+','99dad97765554dadaddd111222dfe333da444dadad555666')

#print res3

'''
findall的作用:
只要和表达式相匹配的都拿过来,会一直找,找到所有的
'''

#compile函数 作用:编译表达式
com = re.compile('\d+') #编译表达式后生成一个对象
#print com.findall('99dad97765554dadaddd111222dfe333da444dadad555666')

'''
如果用同样的表达式去匹配100次不同的字符串,
那么这种方式就是先编译一次,去查找100次,编译表达式这种方式效率更高
'''


#小粒子2
#目标:在这段悲催的字符中找出IP地址
#知识点:正规表达式 "\d" 代表一个数字,{1,3}代表出现1-3次
ips = '12.34.43.ddsd.dwdda.ddad.rfaw+87dd192.168.32.43_hfshfsh.887fsdf'
com = re.compile('\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3}')
ip = com.findall(ips)
print ip


#小粒子2
#目标:要求你填写的QQ号必须为5位到12位数字
#知识点: ”^“匹配字符串的开始,”$“匹配字符串的结束,{6,12}代表必须重复最少6次,最多12次,否则都不匹配。
#也就是说,您输入的QQ号码必须是不能少于6位,不能大与12位,否则出错
def check_nums(qq):
    com = re.compile('^\d{6,12}$')
    qqs = com.findall(qq)
    if len(qqs) == 0:
        print '您输入的QQ号位数有误'
    else:
        print '您的QQ号已受理'

check_nums('996298929')

'''
那么关于正规表达式的学习,下面推荐一个学习教程:http://deerchao.net/tutorials/regex/regex-1.htm
但这个教程仅仅只是入门而已。那么,平时在工作中用到的时候,不懂的在百度或翻墙到google查一查即可。
'''