#!/usr/bin/env python
# -*- coding:utf-8 -*-
# 为什么要有正则表达式?
# 匹配字符串
# 一个人的电话号码
# 一个人的身份证号
# 一台机器的ip地址
# 表单验证
# 验证用户输入的信息是否准确
# 11位 全数字 1开头 第二个数3-9之外的数
# 银行卡号
# 爬虫
# 从网页源码中获取一些链接、重要数据
# 正则规则(元字符,量词)
# 第一条规则 : 本身是哪一个字符,就匹配字符串中的哪一个字符
# 第二条规则 : 字符组[字符1字符2],一个字符组就代表匹配一个字符,只要这个字符出现在字符组里,那么就说明这个字符能匹配上
# 字符组中还可以使用范围
# 所有的范围都必须遵循ascii码从下到大来指定
# [0-9] [a-z] [A-Z]
# [0-9] \d 表示所有的数字
# d --> d
# \d --> \是转义符 转义符转义了d,让d能够匹配所有0-9之间的数
# \w 表示 大小写字母 数字 下划线
# \s 表示空白 空格 换行符 制表符
# \t 匹配制表符
# \n 匹配换行符
# \D 表示所有的非数字
# \W 表示除 数字字母下划线之外的所有字符
# \S 表示非空白
# . 表示除了换行符之外的任意内容
# [] 字符组 :只要在中括号内的所有字符都是符合规则的字符
# [^ ]非字符组 :只要在中括号内的所有字符都是不符合规则的字符
# [] [^]
# ^ 表示一个字符的开始
# $ 表示一个字符的结束
# | 表示或,注意,如果两个规则有重叠部分,总是长的在前面,短的在后面
# () 表示分组,给一部分正则规定为一组,|这个符号的作用域就可以缩小了
# [\d] [0-9] \d 没有区别 都是要匹配一位数字
# [\d\D] [\W\w] [\S\s] 匹配所有一切字符
# 元字符
# \d \w \s \t(table) \n(next)
# \D \W \S
# .
# [] [^]
# ^ $
# | ()
# 量词
# {n} 表示只能出现n次
# {n,} 表示至少出现n次
# {n,m}表示至少出现n次,至多出现m次
# ? 表示匹配0次或1次 表示可有可无 但是有只能有一个 比如小数点
# + 表示匹配1次或多次
# * 表示匹配0次或多次 表示可有可无 但是有可以有多个 比如小数点后n位
# 匹配0次
# 匹配任意的2位整数
# 匹配任意的保留两位小数的数字
# 匹配一个整数或者小数 \d+\.\d+|\d+ \d+\.?\d* \d+(\.\d+)?
# 默认贪婪匹配,总是会在符合量词条件的范围内尽量多匹配
# \d{7,12}
# <html>adljdkjsljdlj</html>