正则表达式
正则表达式就是符合一定规则的字符串 ,主要作用是匹配字符串
元字符
元字符 | 描述 | 举例 |
---|---|---|
. 英文点符 | 表示的是除了\n以外的任意一个字符 | a、s、,、1、¥等 |
[ ] 中括号 | 表示范围; 还可以清除表达式中的元字符的作用,比如[.]就失去了上述作用,代表仅仅是英文点而已 | 比如: [0-9] 表示的是0-9之间的任意一个数字; [a-z] 表示小a到小z之间的任意一个小写字母; [0-9a-z A-Z]表示数字0-9和者全部大小写字母中的任意一个字符 |
|一个竖线 | 或者的意思 | 比如[0-9]|[a-z]表示是数字或者是小写字母中的任意一个字符 |
()圆括号 | 分组 | (.[0-9][a-z])([A-Z][0-9]) |
*星号 | 限定前面的表达式对应的字符出现的次数 | [a-z][0-9]* 就代表一个小写字母加上0或者是n个数字 |
+ 加号 | 限定前面的表达式对应的字符出现1个及以上 | [0-9][a-z]+ 表示一个数字加上1个及以上的字母 |
? 问号 | 限定前面的表达式出现0次或者1次 | |
{} 花括号 | 限定前面的表达式出现的次数 | [0-9]{6,10} 它的意思是数字出现的次数是6到10次,也就是说可以匹配是6到10位长度的数字串 |
^ 该符号是shift+数字键6的输入 | 在表达式外面表示以后面的表达式开始; 或者是放在表达式内部表示取反 | ^[a-z]表示以小写字母开头; [^a-z]表示除了小写字母以外的任意字符 |
$ 美元符 | 表示以前面的表达式结束 | 比如: [9]$ 必须以数字9为结束 |
\d | 任意一个数字相当于[0-9] | [a-z][0-9] == [a-z]\d |
\D | 任意一个非数字 | 数字以外的任意字符 |
\s | 空白符 | 比如输入的是空格或者tab键 |
\S | 非空白符 | 能看得到的都是非空白 |
\w | 非特殊符号 | _下划线、字母等等价于[A-Za-z0-9_] |
\W | 特殊符号 | 等价于[^A-Za-z0-9] |
正则表达式的规则
类型 | 举例 |
---|---|
字符 | ‘x’ 表示字符 “x” |
"\\"反斜线字符,需要两个反斜线才代表一个反斜线 | |
"\n"换行符 | |
"\r"回车符 | |
字符类 | “[abc]”: a、b或c |
“[^abc]” :任何字符,除了a、b或c,也就是上一条内容的否定 | |
“[a-zA-Z]”:范围是所有的英文大小写字母,a到z或A到Z,两头的字母包括在内 | |
“[0-9]” : 范围是0到9的数字字符 | |
预定义字符类 | “.“英文点,表示任何字符,如果想表示“.”本身,只需要加上反斜杠”\.” |
“\d” 反斜杠+小写d,表示数字:[0-9] | |
“\D"反斜杠+大写D,表示非数字:”[^0-9]" | |
“\w” 斜杠+小写w,表示单词字符:[a-zA-Z_0-9],在正则表达式中组成单词的字符,必须由该指定字符组成。 | |
边界匹配器 | “^”以xx开始,行的开头,可以结合Linux中vim的行命令一起记忆 |
“$”以xx结尾,行的结尾,可以结合Linux中vim的行命令一起记忆 | |
“\b”反斜杠+小写b,单词边界–即不是单词字符(单词字符见上面的预定义字符类,及字母数字和下划线)的地方,比如 hi zhengze,how are u! 这里的单词边界是空格、逗号和感叹号。 | |
数量词 | “X?” X ,一次或一次也没有,及X的出现的次数小于等于1次 |
“X*” X,零次以上,及X出现的次数大于等于0 | |
"X+"X,一次及以上,及X出现的次数大于等于1 | |
“X{n}” X,恰好出现n次,及X出现次数等于n | |
“X{n,}” X,至少n次 ,及X出现次数大于等于n | |
“X{n,m}” X,至少n次,但是不超过m次,及X出现次数大于等于n,且小于等于m |
正则表达式的应用(功能)
功能类型 | 举例(以Java中的使用为例) |
---|---|
判断功能 | String 类中的 方法:public boolean matches(String regex),常用于邮箱、手机等的校验,这里以邮箱为例 email.matches("[a-zA-Z_0-9]+@[a-zA-Z_0-9]{2,6}\\.[a-zA-Z_0-9]{2,3}"); |
分割功能 | public String[] split(String regex),根据分割符返回一个字符串数组 |
替换功能 | public String replaceAll(String regex, String replacement),比如说替换掉敏感词等 |
获取功能 | Pattern和Matcher类的使用 |