初识正则表达式
一套规则 - 匹配字符串:所有的规则中的字符可以刚好匹配到字符串中的内容
主要作用:
1.能检测一个输入的字符串是否合法 -- web开发项目--表单验证
用户输入一个内容的时候,我们要提前做检测
能够提高程序的效率并减轻服务器的压力
2.从一个大文件中找到所有符合规则的内容 --日志分析/爬虫
能够高效地从一大段文字中快速找到符合规则的内容
一、元字符
# 字符组 --> [] # [^] --> 匹配非字符组中字符的所有字符 # [abc] 一个中括号只表示一个字符位置:表示匹配a或b或c # [0-9] 表示匹配 0 到 9 之间的一个数字(根据ascill码范围) # [a-z] 表示 a 到 z 之间的一个字母 # [A-Z] # [a-zA-Z] 匹配范围内的一个大小写字母 # [0-9a-z] 数字和小写字母 # [0-9a-zA-Z] 数字和大小写字母 # 在正则表达式中能够帮助我们表示匹配内容的符号:元字符 # [0-9] --> \d 表示匹配任意一位数字 digit # \w --> 表示匹配任意一位 数字、字母、下划线 # \s --> 匹配空白符 制表符、回车、空格 # \b ---> 边界,即以什么开头(\b.)或以什么结尾(.\b) ---不常用
二、元字符
# 元字符:匹配内容的规则 # [] \d \w \s \t \n \W \D \S # \W --> 取反,匹配非数字、字母、下划线 # \S --> 取反,匹配非空白符 # \D --> 取反,匹配非数字 # [\d] == \d # [\d\D] [\w\W] [\s\S] --> 匹配任意一个字符 # . --> 匹配除了换行符之外的任意一个字符 # [^\d] --> 匹配所有的非数字 # ^ --> 从头开始匹配(正则表达式开头) # $ --> 匹配结尾前的相应字符(正则表达式结尾) # 或: # ad|bc --> 匹配 ad 或 bc ,如果左边匹配成功了,则不会再匹配右边 # abc|ab --> 当两边有重复的部分时,应把长的字符串放在左边 # 分组:约束 | 描述的内容的范围问题 # www\.oldboy\.com|www\.taobao\.com|www\.baidu\.com # 分组后:www\.(oldboy|taobao|baidu)\.com # 记忆元字符:都是表示能匹配哪些内容,一个元字符总是表示一个字符的位置 # \d \w \s \t \n \D \W \S # [] [^] . # ^ $ # | ()
三、量词
# 匹配两位整数:--> [1-9]\d # 量词: # 紧接某个元字符,即同一个元字符要匹配多少次 # {n} --> 表示匹配n次 # {n, } -->匹配n次及n次以上 # {n, m} --> 匹配 n 到 m 次 # ? --> 匹配0次或1次 == {0,1} # + --> 匹配1次或多次 == {1,} # * --> 匹配0次或多次 == {0,} # 匹配0次: # 整数 \d+ # 小数 \d+\.\d+ # 整数或小数 \d+\.?\d* 这个表达式有漏洞 # 分组的作用:\d+(\.\d+)? --> 表示整数或小数 # 手机号码 # 1 3-9 11位:^1[3-9]\d{9}$ # 判断用户输入的内容是否合法,如果输入对就能查到结果 # 约束:^1[3-9]\d{9}$ # 从一个大文件中找到所有符合规则的内容 # 约束:1[3-9]\d{9}
四、贪婪匹配与惰性匹配
# 贪婪匹配: # 在量词给定范围{n,m} 下,尽量多的匹配内容 # 惰性匹配:即非贪婪匹配 # 元字符 量词 ? # .*?x 表示匹配任意字符,任意次数,但一旦遇到x就停下来 # 转义符: # 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义 # 有一些有特殊意义的字符,放到字符组中会取消它的特殊意义 # [.] # [() . * + ?] # [a\-c] 在字符组中,如果不希望 - 表示范围,需要转义或者放在字符的最前面或最后面
五、转义字符
# 转义字符 # .有特殊的意义,取消特殊的意义 \. # 取消一个元字符的特殊意义有两种方法: # 1. 在这个元字符前加 \ # 2. 对一部分字符生效,把这些元字符放在字符组里 # [. ? + * ()]
六、小习题
# 15/18的位身份证号 # 15位:第一位为1-9 # ^[1-9]\d{14}$ # 18位:第一位1-9 最后一位0-9或x # ^[1-9]\d{16}[0-9x]$ # 18/15位:^([1-9]\d{16}[0-9x]|[1-9]\d{14})$ # 写法2:^[1-9]\d{14}(\d{2}[0-9x])?$

浙公网安备 33010602011771号