# 正则表达式
# 默认是贪婪匹配
# 量词后加?成为惰性匹配
'''
import re
while 1:
ph_num = input('please input ur phone number: ')
if re.match('^(13|14|15|16|17|18)[0-9]{9}$', ph_num):
print('ur phone number is: ', ph_num)
break
else:
print('wrong input, try again')
'''
'''
[0123456789] 可以匹配中括号中的某一单个字符
[0-9] 可以匹配0123456789
[a-z] 可以匹配任意小写字母
[A-Z] 可以匹配任意大写字母
[A-z] 匹配大小写字母及中间的ascii码其他字符
[0-9a-zA-Z] 多个字符范围并列写
元字符:
. 匹配除了换行符以外的任意字符
\w 匹配字母数字下划线
\s 匹配任意空白符(tab space)
\d 匹配数字
\W 匹配非字母数字下划线
\S 匹配非空白符
\D 匹配非数字
[\w\W] 匹配所有
\n 匹配一个换行符
\t 匹配一个制表符(tab)
\b 匹配一个单词的结尾(取另外一个条件且在单词结尾的字符)
^ 以什么开头,相当于startswith
$ 以什么结尾,相当于endswith
^ $中间的内容为匹配规则
a|b 匹配a或者b
() 是一个分组
[..] 匹配[]内的某一个字符
[^ab] 匹配除了[]内字符的所有字符
量词————用在匹配条件后面
* 重复匹配0次或多次
+ 重复匹配1次或多次
? 重复匹配0次或1次
{n} 重复n次
{n,} 重复n次或更多次
{n,m} 重复n到m次
'''
'''
绿茶白茶黄茶清茶红茶黑茶
.茶
(.茶)+
'''
'''
海燕海娇海东
海.
^海.$
'''
'''
李杰和李莲英和李二棍子
李[^和]+
李[杰莲英二棍子]*
'''
'''
字符集+量词+?或没? ?惰性,没?默认贪婪
'''
'''
身份证号码是15或18个字符的字符串
如果15位则全部由数字组成
首尾不能为0
如果是18位,则前17位全部是数字,末尾可能是数字或x
[1-9]\d{13,16}[0-9x]
[1-9]\d{14}(\d{2}[0-9x])?
[1-9]\d{16}[0-9x]|[1-9]\d{14} 或运算,要先长的后短的,否则前面短的会被直接匹配
'''
'''
转义符
\\d ===>\d
\\n ===>\n
在python中
r'\\n' ====>\n
r'\\d' ====>\d
'''
'''
<script>...<script>
<.*>
<.*?>
'''
'''
.*?x
取任意字符 0至无限长度 尽可能少重复
就是去前面任意长度的字符,知道出现x
'''