正则表达式

正则表达式

正则表达式与编程语言无关,是用来校验字符串的规则。

//校验str是否符合指定的正则表达式,其中regex是正则表达式,是一个字符串,返回值为boolean 类型
boolean ret = str.matches(regex);

^:是用来匹配一个字符串的开头

$:是用来匹配一个字符串的结尾(一般来说是和^成对出现的)

[]:用来匹配一位字符

[abc]:表示这位字符可以是a,也可以是b,也可以是c

[a-z]:是一个小写字母

[a-zA-Z]:是一个字母

[^abc]:表示除了a、b、c外的任意字符

[0-9]:表示一个数字

[^0-9]表示除了数字之外的字符

//需求:校验一个字符串中,某一位不能是任意小写字母,但是hij除外
str.matches("^[^a-z[hij]]$");

\:转义字符,在java中写正则表达式,一般用\\

.:通配符,可以表示任意的一个字符

//判断是不是'.'
"/".matches("^\\.$");

简写形式:

\d:等价于[0-9],用来匹配任意的一个数字

\D:等价于 [^0-9] ,用来匹配任意的一个非数字

\w:可以匹配任意的大小写字母数字和下划线

\W:可以匹配任意的非大小写字母数字和下划线

+:表示前面的一位或者一组字符出现一次或多次

?:表示前面的一位或一组字符出现一次或两次

*:表示前面的一位或一组字符出现零次或多次

"helllllo".matches("^hel*o$");
"hello world".matches("^hello \\w+$");
"1234567890".matches("^\\d+$");
"hello".matches("^hel?lo$");

{m}:表示前面的一位或一组连续出现m次

{m,}:表示前面的一位或一组连续出现至少m次

{m,n}:表示前面的一位或一组连续出现至少m次,至多n次

"hellllo".maeches("^hel{0,5}o$");

():表示一个分组,可以将他们是为一个整体

"hello hello hello hello world".matches("^(hello )+world$");

|:或,一般用在分组中

"hi world".matches("^(hi|hello) world$");

案例:

1.验证一个qq是否是一个合法的qq号(长度[6-12],纯数字,不以0开头)

"123456".matches("^[1-9]\\\d{5,11}$");

2.判断一个数字是不是一个二进制

"0b110011000001".matches("^0b[01]+$");

3.判断一个数字是不是一个十六进制

"0x123ABC".matches("^0x[0-9A-Fa-f]+$");

4.验证一个邮箱是不是QQ邮箱、126邮箱、163邮箱

"asdasd@126.com".matches("^\\w+@(qq|QQ|126|163)\\.com$");

Pattern类:用来操作正则表达式的类

Matcher类:用来校验结果的集合

pattern的静态方法:

boolean ret = Pattern.matches("^[1-9]\\d{5,11}$","17110658843");

Pattern的对象获取:由于Pattern没有无参构造,而且Pattern 的有参构造都是不可见的。因此,无法通过new的方式进行对象实例化

Pattern p = Pattern.complie("[1-9]\\d{5,10}");

校验指定的字符串是否合乎正则表达式的规则

Matcher m = p.matcher("13570948930");

m.pattern();//获取用来校验的正则对象
m.matches();//获取校验的结果

案例:将一个手机号中间四位替换为****

String regex = "^(1[3,5,6,7,8]\\\d)(\\\d{4})(\\\d{4})$"

Matcher m1 = Pattern.compile(regex).matcher("18807764545");

//分组前,需要先调用find()

m1.find();
System.out.println(m1.groupCount());
System.out.println(m1.group(0));
System.out.println(m1.group(1));
System.out.println(m1.group(2));
System.out.println(m1.group(3));
System.out.println("18877665544".replaceAll("^(1[3578]\\d)(\\d{4})(\\d{4})$", "$1****$3"));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值