关于一些Java的正则表达式

正则表达式(规则表达式)

英文:Regular Expression

简写:reg ex / reg exp

正则表达式的由来:

regex的鼻祖:人类神经系统工程研究

他用很小的单元来描述神经网络。

1951年:Stephen Kleene数学科学家,在最早的神经学系统研究的基础上,研究出了一个数学模型。它被慢慢称之为正则集代数。

后来正则集代数就慢慢应用到了计算机领域,称之为正则表达式。

正则表达式是一种带有规律/格式的表达式。与语言无关。

正则表达式通常的作用:

  • 匹配格式,格式校验
  • 拆分、替换
  • 检索字串

我们使用Java提供的String类中的方法来做关于正则表达式的过程。

其中,前两个作用String类的一些方法就可以完成了。

boolean = str.matches(“regex”);

String[] = str.split(“regex”);

String = str.replaceAll(“regex”,“replacement”)

(注意replace方法是不支持正则表达式的,支持正则表达式的是replaceAll方法)

第三个作用(检索字串)则需要依赖Pattern模式,Matcher匹配器。


利用String类实现正则表达式的匹配:

  • []只匹配单个字符

  • [abc]表示匹配字串必须是a,b,c其中的一个

  • [^abc]表示匹配不是a,b,c其中的任何一个

  • [a-z]表示匹配所用的小写字母中的一个。

  • [A-Za-z]表示匹配所用的大写字母和小写字母中的一个,(中间不要有空格,否则它也能匹配空格)

  • [a-z&&[^bc]]表示匹配不是b和c的所有小写字母

以上是一些基本的表示形式,随着这个表达式越来越长,写起来必然会很麻烦。

所以产生了一些简写形式:

  • . 表示任意一个字符

  • [0-9]表示数字,可以简写为\d (它使用的单词digit的首字母)

  • 所有非数字:\D

  • 留白:空格、回车、换行 简写为\s (它使用的单词space的首字母)

  • 非留白:\S

  • 单词:[0-9A-Za-z] \w (它使用的单词word的首字母)

  • 非单词:\W

  • 中文字符:[\u4E00-\u9FA5]

以上的部分都是用来做匹配的,但是都只能匹配单个字符。

如果要匹配多个字符,就需要用到’‘次数’'来进行匹配。

(次数添加在表达式之后)

  • ?表示出现0-1次

  • *表示出现0-n次

  • +表示出现1-n次

  • {n} 固定的n次

  • {n,}至少出现n次

  • {n,m}出现n-m次

总结:表达式使用中括号[]括起来的,表达式写完之后,后面的次数可以用大括号{}来写。

另外:

  • ^:匹配输入字符串的开始位置
  • $:匹配输入字符串的结束位置

检索:

有一个字符串,150000java150001abc150002,搜索其中有多少个150000.

String message = "150000java150001abc150002";
Pattern pattern = Pattern.compile("[0-9]{6}");//模式,规则
//需要一个匹配器来执行扫描
Matcher matcher = pattern.matcher(message);//匹配器,按照pattern规则,扫描message
while (matcher.find()){
    String v = matcher.group();
    System.out.println(v);
}

另外以下常用正则表达式为大家作为参考:

    //1、匹配汉字:^[\\u4e00-\\u9fa5]{0,3}$
    String str1 = "你好吗";
    boolean b1 = str1.matches("^[\\u4e00-\\u9fa5]{0,3}$");
    System.out.println(b1);//true

    //2. 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
    //任选一种
    String str2 = "cvhds15622";
    boolean b2 = str2.matches("^[A-Za-z0-9]+$");
    System.out.println(b2);//true

    // 3.Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
    String str3 = "1581632569@11.com";
    boolean b3 = str3.matches("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
    System.out.println(b3);//true

    //4.电话号码:^(\d{3,4})-\d{7,8}$
    String str4 = "199-73994752";
    boolean b4 = str4.matches("^(\\d{3,4})-\\d{7,8}$");
    System.out.println(b4);//true

    //5.手机号码:^(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}$
    //任选一种方式
    String str5 = "18873884752";
    boolean b5 = str5.matches("^(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}$");
    System.out.println(b5);//true

    //6. 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
    String str6 = "1887388";
    boolean b6 = str6.matches("[1-9][0-9]{4,}");
    System.out.println(b6);//true

   // 7. 日期格式:^\d{4}-\d{1,2}-\d{1,2}
    String str7 = "1999-10-24";
    boolean b7 = str7.matches("^\\d{4}-\\d{1,2}-\\d{1,2}");
    System.out.println(b7);//true

    //8. 身份证号(15位、18位数字):^\d{15}|\d{18}$
    String str8 = "575382325381235";
    boolean b8 = str8.matches("^\\d{15}|\\d{18}$");
    System.out.println(b8);//true

    //9. 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
    String str9 = "shi_1024";
    boolean b9 = str9.matches("^[a-zA-Z][a-zA-Z0-9_]{4,15}$");
    System.out.println(b9);//true

    //10. 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
    String str10 = "shi_1024";
    boolean b10 = str10.matches("^[a-zA-Z][a-zA-z0-9_]{5,17}$");
    System.out.println(b10);//true
    
    //11. 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
    String str11 = "Shi_1024";
    boolean b11 = str11.matches("^(?=.*\\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$");
    System.out.println(b11);//true
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值