文章目录
在线编写验证网站: https://regex101.com/
基础知识
1、限定运算符
- * 表示出现任意次 ,即0-n次
如: ab*
它表示 b出现任意多次,
满足匹配的: a、ab、abbbb
- + 表示出现 1-n次
如 ab+
满足匹配 ab、abbbb, 即至少出现一次
- ? 表示出现0-1次
如:ab?
满足匹配: ab、a
- {x,y} 表示出现的次数
如:ab{2,4}
满足匹配: abb、abbb、abbbb, 即b出现2-4次
如:ab{2}
满足匹配: abb , 即:b出现两次
如:ab{2,} 表示至少出现2两次, 注意没有{,2} 最多出现两次可以用{0,2}替换
满足匹配:abbbb、abb
2、或运算法
- | 或运算符
如:ab|aa
满足匹配: ab、aa
如:abc(123|321)
满足匹配的是: abc123、abc321
注意这里不能写作abc123|321, 这样写是匹配abc123或者321
3、字符类
- [] 表示匹配指定范围的
如:123[abc] 等价于123(a|b|c), 等价于[a-c]
满足匹配:123a、123b、123c
如:123[a-z,A-Z], 表示匹配所有字母大小写
满足匹配:123a、123A、123F 等
- [^] 表示反义、非XXX
如:123[^0-9] 表示非数字
满足匹配如: 123x、123Z等
4、元字符
- \d 数字和 非数字\D
如: 123\d\D
满足匹配: 1234D、1237Q、 1236换行 (\D的表示包括换行符)
- \w 所有的单词(字母、数字、下划线), \W表示非单词
这个的匹配比较广泛一些
如: 空格\w
满足匹配: 空格1、空格A、空格_
- \s 匹配空白符号(包括换行符、空格), \S 匹配非空白符
如:1\s
满足匹配:1空格 、1换行
- . 表示任意字符(换行符除外)
如: ..
满足匹配:空格空格、11、不满足的:1换行
- \ 表示转义符
如:\\\.
满足匹配: \.的字符
- ^ 表示开头、$表示结尾 (常用)
如:^123$
满足匹配:精准匹配123、 如a12345等字符串不会匹配出来
5、贪婪、懒惰匹配
案例:匹配以下字符中的html标签
<p>123<span></span><></p>
若使用 <.*> 则会完整的匹配整个字符, 这里称为字符的贪婪匹配
若使用 <.*?> 则会达到我们想要的效果, 称为懒惰匹配
常见的正则案例
0、以xxx开头, 以xxx结尾
以“你好”开头:^(?=你好)
不以“你好”开头:^(?!你好)
以“你好”结尾:(?<=你好)$
不以“你好”结尾:(?<!你好)$
在来看一个案例
\d+(?<=abc)$ 表示任意的数字但后面必须是abc结尾
如: 123abc、123xxx 222abc、 这些数据中若不完全匹配则 123abc中的123会被匹配出来
若想表示后面只要有abc的就行可以使用
\d+(?<=abc).*$
1、校验全中文
^[\u4e00-\u9fa5]{0,}$
2、密码8-10位由数字、字母(大小写)
^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\d,a-z,A-z]{8,10}$
这个比较复杂我们分开看
- 1、首先密码长度8-10位, 即:^.{8,10}$
- 2、密码包含数字、字母(大小写)组成,也就是这些元素出现在任意位置任意多次
即这里8-10位中必须包含 .*\d 和.*[a-z] 和.*[A-Z]
3、金额校验
如校验必须是两位小数
^[0-9]+(.[0-9]{2})?$
解释: + 表示1-n, 后面的?表示0-1,即要么是整数要么是带两位小数
4、手机号校验
// 目前这段代码可以可以校验13、14、15、18开头的
^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5、邮箱校验(比较复杂)
// 比较复杂
[\w!#$%&'*+/=?^_`{|}~-]+(?:\.[\w!#$%&'*+/=?^_`{|}~-]+)*
@(?:[\w](?:[\w-]*[\w])?\.)+[\w](?:[\w-]*[\w])?
6、身份证校验
下面是身份证号码的正则校验。15 或 18位。
15位:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位:
^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$
更多请参考:
https://www.cnblogs.com/dongzhuangdian/p/5934726.html
Java中正则的使用
// 要注意Java中 \要使用 \\ 表示, 如:\d表示为\\d
Pattern p = Pattern.compile("(\\d+,)(\\d+)");
// 案例
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[0-9]*");
Matcher matcher = pattern.matcher("12323测试");
System.out.println(matcher.matches()); // 全匹配 ,false
System.out.println(matcher.find()); // 部分匹配, true
pattern = Pattern.compile("^[0-9]*$");
matcher = pattern.matcher("12323测试");
System.out.println(matcher.matches()); // 全匹配 ,false
System.out.println(matcher.find()); // 部分匹配, false
}