概述
本文主要介绍正则表达式的代码使用。
学习正则表达式的基本语法,可以参考使用手册:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
但是有几个问题需要特别注意:
① 转义符号 \ 的问题
比如,我们需要匹配一个数字,对应的正则表达式是:\d
,因为在 Java 中正则表达式是通过字符串的形式表示的,所以,在 Java 中对应的写法为:"\\d"
。
正则表达式的作用
正则表达式的作用有两个:
- ① 匹配:判断给定的字符串是否符合格式,比如:邮箱地址匹配、密码安全性验证。
- ② 捕获:查找给定文本,提取出固定格式的字符串,比如:提取出文本中所有的电话号码。
匹配的使用
匹配的使用比较简单,具体代码如下:
//需要匹配的字符串
String str = "abc";
//对应的正则表达式
String regexStr = "[a-z]{3}";
//使用如下代码进行匹配
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(str);
System.out.println(m.matchers());
更简化的写法:
System.out.println("abc".matches("[a-z]{3}"));
捕获的使用
要理解捕获,需要引入一个概念:
捕获组: 给定一个正则表达式:((A)(B(C)))
,在进行正则表达式匹配查找之后,会产生一个捕获组,顺序为:((A)(B(C))) (A) (B(C)) (C)
,分别对应编号:0 1 2 3
。我们可以使用这个编号从捕获组中得到对应的字符串。
具体代码如下:
String str = "This order was placed for QT3000! OK?";
String regexStr = "(\\D*)(\\d+)(.*)";
Pattern p = Pattern.compile(regexStr);
Matcher m = p.matcher(str);
if (m.find( )) {
System.out.println("Found value: " + m.group(0) );//This order was placed for QT3000! OK?
System.out.println("Found value: " + m.group(1) );//This order was placed for QT
System.out.println("Found value: " + m.group(2) );//3000
System.out.println("Found value: " + m.group(3) ); //! OK?
} else {
System.out.println("NO MATCH");
}
注意:(pattern) (?:pattern) (?=pattern)
等表达式是否会消耗字符,是否会产生捕获,详情可以看文档:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
Matcher 类
Matcher
类有很多功能强大的 API,使用可以参考菜鸟教程:https://www.runoob.com/java/java-regular-expressions.html。
参考
[1] 正则表达式使用手册:https://tool.oschina.net/uploads/apidocs/jquery/regexp.html
[2] 菜鸟教程:https://www.runoob.com/java/java-regular-expressions.html
[3] 如何在 Java 中使用正则表达式:https://mp.weixin.qq.com/s/IcATjoRJrOhNQxy9ouderA