每日一学之Java开发技巧 --正则表达式

java.util.regex 

 

Java中编译、匹配正则表达式的包,核心类为 Pattern 与 Matcher。

 

Pattern

 

正则表达式的解释器,在Patten类的API中,介绍了正则表达式的构造,其中需要重点识记和在项目中常使用的内容主要为

 

字符类
[abc]a、b 或 c(简单类)
[^abc]任何字符,除了 a、b 或 c(否定)
[a-zA-Z]a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]d、e 或 f(交集)
[a-z&&[^bc]]a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
.任何字符(与行结束符可能匹配也可能不匹配)
\d数字:[0-9]
\D非数字: [^0-9]
\s空白字符:[ \t\n\x0B\f\r]
\S非空白字符:[^\s]
\w单词字符:[a-zA-Z_0-9]
\W非单词字符:[^\w]
边界匹配器
^行的开头
$行的结尾
\b单词边界
\B非单词边界
\A输入的开头
\G上一个匹配的结尾
\Z输入的结尾,仅用于最后的结束符(如果有的话)
\z输入的结尾
Greedy 数量词
X?X,一次或一次也没有
X*X,零次或多次
X+X,一次或多次
X{n}X,恰好 n 次
X{n,}X,至少 n 次
X{n,m}X,至少 n 次,但是不超过 m 次
Reluctant 数量词
X??X,一次或一次也没有
X*?X,零次或多次
X+?X,一次或多次
X{n}?X,恰好 n 次
X{n,}?X,至少 n 次
X{n,m}?X,至少 n 次,但是不超过 m 次
Possessive 数量词
X?+X,一次或一次也没有
X*+X,零次或多次
X++X,一次或多次
X{n}+X,恰好 n 次
X{n,}+X,至少 n 次
X{n,m}+X,至少 n 次,但是不超过 m 次

 

书写正则表达式

 

我相信大家只要到网上一搜,很多的利用正则验证例如手机号码、身份证、以及上篇分享中的数字验证等。下面以验证手机号码为例说明怎么编写正则表达式

 

  • 编写判断11位数字的正则

String regex = "\\d{11}";
  • 判断手机三位数字的正则(判断号段)

regex = "1(80|34|35|36)";
  • 整合为判断手机号的正则

regex = "1(80|34|35|36)\\d{8}";

1、上述内容未包含完所有的号段,需要大家自己补充
2、\d表示数字,\\d是因为在Java中进行转义的缘故
3、小括号表示分组,中括号表示一个正在表达式,大括号表示前面相邻正则的数量

 

Pattern和Matchers

Pattern p = Pattern.compile(regex);
Matcher mt = p.matcher("18052450747");
System.out.println(mt.matches());

上面表示了Parrern和Matchers的使用方式,首先创建模式,其次创建此模式的匹配器,最后进行匹配操作。当时字符串可以直接调用matches()进行匹配

"13585425411".matches(regex);

查找出所有的电话号码

 

  • 利用find(int i)与start()实现

String findStr = "我的手机上存了18054874574,135还有13652548747等号码";
Pattern p = Pattern.compile(regex);
Matcher mt = p.matcher(findStr);
int start = 0;while(mt.find(start)){
    int index = findStr.indexOf(mt.group()) + mt.group().length();
    start = index;
    System.out.println("1: "+mt.group());
}
  • 利用find()与group()实现

while(mt.find()){    
    String e=mt.group();
    System.out.println("3: "+e);
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值