背景
最近真是被正则表达式折磨到了,在写代码过程中,需要获取接口返回数据中的某一段内容,不得不用上正则表达式,但是真的好难记住啊,写了两次正则表达式,遂记录常用的方法。
需求
获取某个字段中以A字段开始之后的字段
获取某个字段中以A字段开始和B字段结束的中间字符
过程
代码如下
private String getRevision(String message){
String regex="(?<=https://phab.devops.xxxxx.com/D)\\d*$";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(message);
if(m.find()){
return m.group(0);
}else{
return null;
}
}
private String getBizLine(String message){
String regex="(?<=\\[).*?(?=])";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(message);
if(m.find()){
return m.group(0);
}else{
return null;
}
}
基础用法:正则表达式 – 语法 | 菜鸟教程
代码中用到了以下几种用法:
1.?<=
(?<=exp2)exp1:查找 exp2 后面的 exp1。
2.$
匹配输入字符串的结尾位置
3.\d
匹配一个数字
4.*
匹配前面的子表达式零次或多次
5..
匹配除换行符 \n 之外的任何单字符
6.[
标记一个中括号表达式的开始。要匹配 [,请使用 \[
7.?=
exp1(?=exp2):查找 exp2 前面的 exp1。
8.?
匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。
9.Pattern和Matcher类
- Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。
- Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。
Matcher.find():是否存在与该模式匹配的下一个子序列。简单来说就是在字符某部分匹配上模式就会返回true,同时匹配位置会记录到当前位置,再次调用时从该处匹配下一个。
Matcher.group():
Matcher
类中group(0)
表示正则表达式中符合条件的字符串。
2.Matcher
类中 group(1)
表示正则表达式中符合条件的字符串中的第一个() 中的字符串。
3.Matcher
类中 group(2)
表示正则表达式中符合条件的字符串中的第二个() 中的字符串。