正则表达式的基本规则
什么是正则表达式
是一套规则,是用来匹配字符串的规则
能做什么
1、检测一个输入的字符串是否合法
能够提高程序的效率并且减轻服务器的压力
2、从一个大文件中找到所有符合规则的内容
能够高效的从一个答断文字中快速找到符合规则的内容
正则规则
所有的规则中的字符就可以就刚好匹配到字符串中的内容
字符组 [] 描述的是一个位置上能出现的所有可能性
接受范围,可以描述多个范围,连着写就可以了
[] 一个中括号只表示一个字符位置
[abc] 匹配a 或 b 或 c
[0-9] 根据ascii进行范围的比对的,
[a-z] 小写字母
[A-Z] 大写字母
[a-zA-Z] 大小写字母
[0-9a-z] 数字和所有的小写字母
[0-9a-zA-Z] 数字和所有的大小写字母
[0-9] --> \d 表示匹配任意一位数字 digit
[0-9a-zA-Z] ---> \w 表示任意一个字母、数字或下划线
匹配空白符(空格\tab\enter) ---> 空格, \t ,\n ---> \s匹配所有的空白符
在正则表达式中能够帮助我们表示匹配的内容的符号都是正则中的元字符
元字符 -- 匹配内容的规则
[]
\d
\w
\s
\t
\n
\W 非字母数字下划线 取反
\D 非数字
\S 非空白符
[\d\D] [\w\W] [\s\S] 匹配所有
. 表示匹配所有除换行符的所有
[^] 表示非字符组
[^\d] 匹配所有的非数字 [^1] 非1 [^zxc]匹配除了字符组(zxc)中字符的所有字符
^ 匹配一个字符串的开始
$ 匹配一个字符串的结尾 a.$ 匹配以a开始以任意字符结尾的字符串
^和$ 约束了内容和位数
() 分组,www\.(baidu|taobao|jd)\.com 约束或描述的内容的范围问题
a表达式|b表达式 ad|bc 匹配a或b表达式中的内容,如果匹配a成功了,不会继续和b匹配
所以,如果规则有重叠部分,总是把长的放在左边
\. 转义成 .
记忆元字符 : 都是表示能匹配哪些内容,一个元字符总是能表示一个字符位置上的内容
\d \w \s \D \W \S \n \t
[] [^] .
^ $
| ()
量词 : 必须跟在元字符的后面,只能约束前面一个元字符
{n} 表示匹配n次
{n,} 表示匹配至少n次
{n,m} 表示至少匹配n次,至多m次
? 表示匹配0次或1次 {0,1}
+ 表示一次或多次 {1,}
* 表示0次或1次或多次 {0, }
匹配0次
整数 \d+ 表示匹配整数
\d+\.\d+ 小数
\d+\.?\d* 小数或整数 分组的作用: \d+(\.\d+)?
手机号: 1 3-9 11位 1[3-9]\d{9}
判断用户输入的内容是否合法,如果用户输入的对就能查到结果,如果输入的不对就不能查到结果。
^1[3-9]\d{9}$
从一个大文件中找到所有符合规则的内容
[^\d]1[3-9]\d{9}[^\d]
正则表达式的贪婪匹配
在量词允许的情况下,尽量按照最多的匹配
.*x 表示匹配任意字符,任意多次数,遇到最后的x就停下来
回溯算法
非贪婪(惰性)匹配
\d{3,}?6 最少三个数字, 遇到第一个6停止匹配
元字符 量词 ? ?尽量少匹配
.*?x 表示匹配任意字符,任意多次数,但是一旦遇到x就停下来
转义符
原本有特殊意义的字符,到了表达他本身意义的时候,需要转义
有一些有特殊意义的内容,放在字符组中,会取消他的特殊意义 [.] 表示. [()] 表示 () 还有 * | ? [().*+?]
[a\-c] - 在字符组中表示范围,如果不希望他表示范围,需要转义,或者放在字符组的最前面\最后面
- 放在字符组[a-z]里表示范围, 不放在字符组里或[-a]表示本身 [a\-c] 表示匹配a 或- 或c
18位的身份证号
[1-9]\d{16}([0-9]|x)|[1-9]\d{14}
[1-9]\d{16}[\dx]|[1-9]\d{14}
[1-9]\d{14}(\d{2}[\dx])?
"^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])[0-9A-Za-z]{8,20}$" 8-20位含数字大小写字母的密码