正则表达式的基本使用

在线编写验证网站: 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
满足匹配: 1234D1237Q、 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、身份证校验

下面是身份证号码的正则校验。1518位。
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
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值