正则表达式
正则表达式概述:专门描述字符串中字符出现规则的表达式
1、用途:(1)验证字符串格式 (2)查找、屏蔽敏感词
2、字符集
- 某一位字符上可能有多种备选字时用:[备选字列表]
- 如果[]中部分字符是连续的,可以用[x-x]
- 一个小写字母:[a-z]
- 一位大写字母:[A-Z]
- 一位字母(大小写都行):[A-Za-z]
- 一位字母或数字都行:[0-9A-Za-z]
- 一位汉字:[\u4e00-\u9fa5]
3、预定义字符集(字符集的最简化写法):
\d -----------一位数字 [0-9]
\w ------------匹配一位字母、数字或_
\s ----------------可匹配空格、制表符Tab等空白
. ------------------匹配所有文字(通配符)
4、数量词
如果规定一个字符集或子规则反复出现的次数时就用量词
- 有明确的数量边界的数量词:
字符集{n} ----------表示字符集必须重复n次,不能多也不能少
字符集{n,m}----------表示字符集至少重复n次,最多重复m次
字符集{n,} ---------------表示字符集匹配的内容至少重复n次,多了不限
-
没有明确数量边界的数量词
* 可有可无 多了不限 0个<=
? 可有可无,最多一次 0个或1个
+至少一次,多了不限 1个<=
5、选择和分组
分组,将多个子规则视为一组,再和分组外的规则匹配,只要希望将多个子规则视为一个整体,再和其他规则匹配时,就用分组(信|x(in)?)
两个规则中选其一匹配即可:规则1 | 规则2
希望将多个子规则分为一组先联合匹配,再和分组外的其他规则联合匹配:(多个子规则)
6、指定匹配位置
^ 表示字符串开头
$ 表示字符串结尾
\b 表示单词边界(零宽)只匹配位置,不匹配字符,英文句子中的单词的左右边界
7、笔试题
在RegExp Buddy中定义规则
- 仅匹配字符串开头的空字符 ^\s+
- 仅匹配字符串结尾的空字符 \s+$
- 同时匹配开头和结尾的空字符 ^\s+|\s+$
- 匹配每个单词首字母 \b[a-zA-Z]
- 匹配每个单词尾字母 [a-zA-Z]\b
- 匹配每个单词的首尾字母 \b[a-zA-Z]|[a-zA-Z]\b
8、案例
-
微信
(微|w(ei)?)\s*(信|x(in)?)
-
手机短信
\d{4}(\d{2})?
-
手机号
1[3-9]\d{9}
-
电子邮件
第一种 \w+@\w+\.\w+(\.cn)? 第二种 (\w*|\d*)@\w*.(com|cn)